【发布时间】:2018-04-11 11:29:42
【问题描述】:
我在让我的 OptionMenu 工作时遇到了一些问题,第一个问题是它无法正常工作,我必须使用一些占位符标签才能使其工作。因此,在下面的示例中,如果我使用 TaxYear 作为主服务器,它会起作用,但如果我使用 TaxYearLi,则不会。
第二个问题是由于某种原因 w.set("2018/2019") 无法正常工作,我收到一个错误,提示我传递的是字符串而不是字符串变量
编辑: 好的,我已经修复了 StringVar 问题并设置默认值需要将 root 定义为 Tk.Tk() 如果有人也可以解释为什么需要这样做会有所帮助.
import Tkinter as Tk
root = Tk.Tk()
w = Tk.StringVar
w.set("2018/2019")
TaxYear = Tk.Label(text="Select tax year")
TaxYear.grid(row=1, column=0)
TaxYearLi = Tk.OptionMenu(TaxYearLi, w, "2018/2019")
TaxYearLi.grid(row=1,column=1)
Tk.mainloop()
【问题讨论】:
-
OptionMenu()的第一个参数(与所有 Tkinter 小部件一样)是父小部件 - 在您的情况下可能是root。你不可能为这个参数传递 widget 本身,不仅因为那个变量甚至还不存在! (您还需要将调用中的父小部件传递给Label(),您将获得默认值,而不是对该过程进行任何控制。) -
@jasonharper,感谢您的帮助,当您说我得到默认值而不是对过程有任何控制权时,您的意思是什么,您能给我举个例子说明我会做什么控制吗失踪。抱歉,我对 Tkinker 很陌生,对 python 也很陌生
-
如果你不指定父窗口小部件,Tkinter 默认使用根窗口(我认为是从第一次调用
Tk())。任何相当复杂的 Tkinter 窗口布局都可能有许多小部件是框架(或其他容器)而不是根的子级,因此除非您实际指定父级,否则无法创建。 -
@jasonharper 啊,所以最好让一个框架成为一堆相关小部件的父级?
标签: python python-2.7 tkinter optionmenu