我希望能够创建一个下拉列表,并为列表中的每个选项分配一个不同的变量。当从下拉列表中选择该选项时,我想要一个输入框来显示关联的变量,而不是选项的名称。
在我的程序中,下拉列表包含人员列表。每个人都是不同的年龄。如何使用下拉列表选择人员,然后在输入框中显示他们的年龄?
如下所示,我已输入此格式名称*年龄的选项。我希望尝试通过*分割,然后选择年龄。我尝试使用以下命令指定输入框的文本:text =((var.get())。split('*')[1])但这不起作用。
如果有办法实现这一点,请告诉我。
from Tkinter import *
import Tkinter as ttk
from ttk import *
root = Tk()
root.title("Age Selector")
mainframe = Frame(root)
mainframe.grid(column=0,row=0, sticky=(N,W,E,S) )
mainframe.columnconfigure(0, weight = 1)
mainframe.rowconfigure(0, weight = 1)
mainframe.pack(pady = 10, padx = 10)
var = StringVar(root)
var.set('Bob')
choices = ['Bob*35', 'Garry*45', 'John*32', 'Hank*65','Tyrone*21']
option = OptionMenu(mainframe, var, *choices)
option.grid(row = 1, column =1)
Label(mainframe, text="Age").grid(row = 2, column = 1)
age = StringVar()
age_ent = Entry(mainframe, text = var, width = 15).grid(column = 2, row = 2)
root.mainloop()
答案 0 :(得分:3)
尝试以下代码。阅读我添加的评论。
from Tkinter import *
import Tkinter as ttk
from ttk import *
root = Tk()
root.title("Age Selector")
mainframe = Frame(root)
mainframe.grid(column=0,row=0, sticky=(N,W,E,S) )
mainframe.columnconfigure(0, weight = 1)
mainframe.rowconfigure(0, weight = 1)
mainframe.pack(pady = 10, padx = 10)
var = StringVar(root)
# Use dictionary to map names to ages.
choices = {
'Bob': '35',
'Garry': '45',
'John': '32',
'Hank': '64',
'Tyrone': '21',
}
option = OptionMenu(mainframe, var, *choices)
var.set('Bob')
option.grid(row = 1, column =1)
Label(mainframe, text="Age").grid(row = 2, column = 1)
age = StringVar()
# Bind age instead of var
age_ent = Entry(mainframe, text=age, width = 15).grid(column = 2, row = 2)
# change_age is called on var change.
def change_age(*args):
age_ = choices[var.get()]
age.set(age_)
# trace the change of var
var.trace('w', change_age)
root.mainloop()
trace(mode,callback)=>串
添加变量观察者。返回观察者的内部名称 (您可以使用此方法取消注册观察者;请参阅下文)。
mode参数是“r”之一(读取变量时调用观察者) 由某人),“w”(当变量由某人写的时调用)或“你” (取消定义;删除变量时调用)。