3

我希望能够创建一个下拉列表,并为列表中的每个选项分配一个不同的变量。从下拉列表中选择选项时,我想要一个输入框来显示关联的变量,而不是选项的名称。

在我的程序中,下拉列表包含人员列表。每个人都是不同的年龄。如何使用下拉菜单选择人员,然后在输入框中显示他们的年龄?

正如您在下面看到的,我以这种格式输入了选项名称*年龄。我希望尝试按 * 拆分,然后选择年龄。我尝试使用以下方法指定输入框的文本: 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()
4

1 回答 1

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()

根据文档

跟踪(模式,回调)=> 字符串

添加一个变量观察者。返回观察者的内部名称(您可以使用它来取消注册观察者;见下文)。

mode 参数是“r”(变量被某人读取时调用观察者)、“w”(变量被某人写入时调用)或“u”(未定义;变量被删除时调用)之一。

于 2013-08-22T12:53:09.440 回答