从 Python 中的 Tkinter OptionMenu 获取值

Wes*_*est 5 python tkinter

我试图打印出在选项菜单中选择的值,但每次运行代码时仅打印第一个值,即使我将选择更改为 b 或 c。不知道我错在哪里。这是我的代码:

from tkinter import *
window=Tk()
window.geometry("700x400")

options=StringVar(window)
options.set("a")
menu=OptionMenu(window,options, "a","b","c")
menu.grid(row=2,column=2)
selection=options.get()
print(selection)
Run Code Online (Sandbox Code Playgroud)

j_4*_*321 5

command您可以使用的选项,而不是跟踪变量OptionMenu。每次单击菜单项时,都会调用该命令。此命令采用一个参数:所选的项目。

import tkinter as tk

def callback(selection):
    print(selection)

root = tk.Tk()
options = tk.StringVar()
menu = tk.OptionMenu(root, options, 'a', 'b', 'c', command=callback)
menu.pack()
options.set('a')
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,最初选择的项目不会被打印,因为用户尚未单击它。如果您需要options.set('a')触发回调,那么您将必须像 mentalita 的答案中那样跟踪变量。


ded*_*z69 0

mainloop首先,您需要在代码末尾调用 Tk 。另外,尝试跟踪options类变量。

\n\n

文档您可以使用跟踪方法将 \xe2\x80\x9cobserver\xe2\x80\x9d 回调附加到变量。每当内容更改时都会调用回调。

\n\n
import tkinter as tk\n\nroot = tk.Tk()\noptions = tk.StringVar()\noptions.trace_add(\'write\', lambda *args: print(options.get()))\nmenu = tk.OptionMenu(root, options, \'a\', \'b\', \'c\')\nmenu.pack()\noptions.set(\'a\')\nroot.mainloop()\n
Run Code Online (Sandbox Code Playgroud)\n