有没有办法从 '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() - 请注意!