【发布时间】:2019-12-20 15:37:48
【问题描述】:
我希望在选择列表框中的名称时更新右侧的标签。选择列表中的新名称时,右侧的名称标签保持不变。
我直接在 student_name.set() 中尝试 name_list.index(ACTIVE) 为 student_name.set(students_list[name_list.index(ACTIVE)].get_name())。恐怕它只是使用索引 0,甚至没有使用主动选择。
from tkinter import *
# Defining Student class
class Student:
def __init__(self, name, instrument=""):
self.name = name
self.instrument = instrument
def get_name(self):
return self.name
def get_instrument(self):
return self.instrument
# Creating Student objects and list
s1 = Student("Seth", "Trumpet")
s2 = Student("Cassie", "Flute")
s3 = Student("Cody", "Guitar")
students_list = [s1, s2, s3]
# GUI created
def make_window():
rootWindow = Tk()
rootWindow.title("Instructor Database Application")
rootWindow.grid()
frame0 = Frame(rootWindow)
frame0.grid(column=0, row=0, padx=20, pady=20)
name_list = Listbox(frame0, height=10)
name_list.grid(column=0, row=0)
for Student in students_list:
name_list.insert(END, Student.get_name())
frame1 = Frame(rootWindow)
frame1.grid(column=1, row=0, padx=20, pady=20)
student_index = name_list.index(ACTIVE)
student_name = StringVar()
student_name.set(students_list[student_index].get_name())
name_label = Label(frame1, textvariable=student_name)
name_label.grid(column=0, row=0)
instrument_label = Label(frame1, text="Instrument")
instrument_label.grid(column=0, row=1)
return rootWindow
def main():
app = make_window()
app.mainloop()
main()
程序以名字开头,无法更改。有什么建议吗?
【问题讨论】:
-
mainloop之前的所有代码甚至在你看到 window 之前就被执行了——而且它只执行一次。您必须绑定到列表功能,该功能将在您每次选择列表中的元素时执行,并且此功能必须更改标签。 -
@furas 好的。我正在理解这个概念。当我做出新的选择时,你对我应该在哪里或如何调用这个函数有什么建议吗?我不确定如何检测到新选择。
-
stackoverflow.com/questions/6554805/… 似乎有点像解决方法,但我认为这会起作用。谢谢
-
你在我的回答中有例子。它显示了如何绑定可以在选择新元素时更改值的函数。
标签: python class user-interface tkinter