我试图打印出在选项菜单中选择的值,但每次运行代码时仅打印第一个值,即使我将选择更改为 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)
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 的答案中那样跟踪变量。
mainloop首先,您需要在代码末尾调用 Tk 。另外,尝试跟踪options类变量。
从文档:您可以使用跟踪方法将 \xe2\x80\x9cobserver\xe2\x80\x9d 回调附加到变量。每当内容更改时都会调用回调。
\n\nimport 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()\nRun Code Online (Sandbox Code Playgroud)\n