有没有办法从 'OptionMenu' 选择中获取特定值?
Is there a way to get a specific value from a 'OptionMenu' selection?
我想使用 tkinter 创建一个下拉菜单,显示一些这样的选项,但我想要一些东西,当你 select 选项“1 - 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.options
字典中的键匹配的字符串,因此您可以使用该值来访问字典。还值得指出的是,字典中的值并不 必须 是数字,它们可以是任何类型,甚至不必全部是同一类型!
FWIW,'options' 字典的键可以是数字或字符串,但为此目的字符串更容易处理(记住:这些是将填充菜单的字符串)。
快速编辑:我觉得我应该指出用于字典键的数据类型无论如何都会被 option_var
“字符串化”,因为它是 tk.StringVar()
- 请注意!
我想使用 tkinter 创建一个下拉菜单,显示一些这样的选项,但我想要一些东西,当你 select 选项“1 - 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.options
字典中的键匹配的字符串,因此您可以使用该值来访问字典。还值得指出的是,字典中的值并不 必须 是数字,它们可以是任何类型,甚至不必全部是同一类型!
FWIW,'options' 字典的键可以是数字或字符串,但为此目的字符串更容易处理(记住:这些是将填充菜单的字符串)。
快速编辑:我觉得我应该指出用于字典键的数据类型无论如何都会被 option_var
“字符串化”,因为它是 tk.StringVar()
- 请注意!