有没有办法从"选项菜单"选择中获取特定值?



我想用tkinter创建一个下拉菜单,显示一些这样的选项,但我想要的是,当你选择选项"一-2〃;您得到一个特定的值(例如:"2"(并将该值用于条目。这样的事情可能发生吗?提前谢谢。

我在网上找到了这个代码-仅供参考

import tkinter as tk
from tkinter import ttk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("320x80")
self.title('Tkinter OptionMenu Widget')
# initialize data
self.languages = ('One - 2', 'Two - 1', 'Three - 4', 'Four - 3', 'Five - 6', 'Six - 5', 'Seven - 8', 'Eight - 7', 'Nine - 0', 'Zero - 9')
# set up variable
self.option_var = tk.StringVar(self)
# create widget
self.create_widgets()
def create_widgets(self):
# padding for widgets using the grid layout
paddings = {'padx': 5, 'pady': 5}
# label
label = ttk.Label(self, text='Select your most favorite number:')
label.grid(column=0, row=0, sticky=tk.W, **paddings)
# option menu
option_menu = ttk.OptionMenu(
self,
self.option_var,
self.languages[0],
*self.languages,
command=self.option_changed)

option_menu.grid(column=1, row=0, sticky=tk.W, **paddings)
# output label
self.output_label = ttk.Label(self, foreground='red')
self.output_label.grid(column=0, row=1, sticky=tk.W, **paddings)
def option_changed(self, *args):
self.output_label['text'] = f'You selected: {self.option_var.get()}'
if __name__ == "__main__":
app = App()
app.mainloop()

代码来自";https://www.pythontutorial.net/tkinter/tkinter-optionmenu/">

您可以将选项列表的内容更改为字典,例如self.languages变为:

# initialize data
self.options = {
'One': 1,
'Two': 2,
'Three': 3,
'Four': 4,
'Five': 5,
'Six': 6,
}

现在字典的键可以用作OptionMenu值

# option menu
option_menu = ttk.OptionMenu(
self,
self.option_var,
*self.options.keys(),  # use dict keys as option items
command=self.option_changed
)

要从字典中获取值,只需更新option_changed()如下:

def option_changed(self, *args):
# get the selected option string
selected = self.option_var.get()
# get the value from the options dictionary
self.output_label['text'] = f'You selected: {self.options[selected]}'

selected将是一个与self.optionsdict中的键匹配的字符串,因此您可以使用该值来访问字典。同样值得指出的是,字典中的值不必是数字,它们可以是任何类型,甚至不必都是同一类型!

FWIW,"选项"dict的键可以是数字或字符串,但字符串更容易处理(记住:这些字符串将填充您的菜单(。

快速编辑:我觉得我应该指出,用于字典键的数据类型为";字符串化的";无论如何都是option_var,因为它是tk.StringVar()——只是一个提醒!

最新更新