你有两个问题:
第一:mainloop()启动窗口,所以pri()在你看到窗口之前执行你的 - 所以在你可以选择任何东西之前。我添加pri到按钮,因此您还可以在选择选项后查看它的工作原理。
第二:所有在函数/类之外创建的变量都是全局的,它们不需要关键字global。您必须使用global内部函数来通知函数,当您将使用分配值时,您将=使用外部/全局变量而不是创建本地变量。
在代码中,我有全局变量normal_var,我global normal_var在内部使用grab_and_assign来通知函数将值分配给全局变量,而不是在行中创建局部变量
normal_var = var.get()
我不必在global内部使用,pri()因为我只从变量nromal_var中获取值而不用于=分配新值
我不必使用global为以下内容分配新值:
var因为它使用set()而不是=.
label_selected["text"]因为它为字典中的键赋值。
但是如果我想分配新的global内部功能,我将不得不使用- 即。label_selectedLabellabel_selected = tk.Label(..)
import tkinter as tk
# --- functions ---
def grab_and_assign(event):
global normal_var
normal_var = var.get()
label_selected["text"] = var.get()
def pri():
print('normal_var:', normal_var)
print('var.get():', var.get())
print('---')
# --- main ---
# global variable
normal_var = "- empty -"
root = tk.Tk()
root.title("Drop-down boxes for option selections.")
# it is global variable
var = tk.StringVar(root)
var.set("drop down menu button")
drop_menu = tk.OptionMenu(root, var, "one", "two", "three", "four", "meerkat", "12345", "6789", command=grab_and_assign)
drop_menu.grid(row=0, column=0)
label_left = tk.Label(root, text="chosen variable = ")
label_left.grid(row=1, column=0)
# create it only once
label_selected = tk.Label(root, text="?")
label_selected.grid(row=1, column=1)
# execute `pri` after button press
b = tk.Button(root, text='PRI', command=pri)
b.grid(row=2, column=0)
# execute `pri` before window starts
pri()
root.mainloop()
顺便说一句:Label有textvariable=,你可以分配var你使用的OptionMenu,然后它会自动显示选定的值
import tkinter as tk
# --- main ---
root = tk.Tk()
var = tk.StringVar(root)
var.set("drop down menu button")
label_selected = tk.Label(root, textvariable=var)
label_selected.pack()
drop_menu = tk.OptionMenu(root, var, "one", "two", "three", "four", "meerkat", "12345", "6789")
drop_menu.pack()
root.mainloop()