【问题标题】:Tkinter OptionMenu errorTkinter 选项菜单错误
【发布时间】: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


【解决方案1】:

如果您需要将变量(在您的情况下为根)声明为 TK() 是因为 Tk() 是 Tkinter 代码中的一个类,它基本上通过向您的操作系统询问来创建窗口。 所以你需要创建一个变量(有些人称之为 root 其他人主,其他父母)将成为你的根/主/父窗口,并且每个小部件都需要在这个变量上。

现在关于您的 OptionMenu,正如我提到的,您需要将所有小部件放在主窗口上(在您的情况下为根)

import Tkinter as Tk

root = Tk.Tk()
w = Tk.StringVar #in Python3 i need to put StringVar() i don't know about 2.x
w.set("2018/2019")

TaxYear = Tk.Label(text="Select tax year")
TaxYear.grid(row=1, column=0)
TaxYearLi = Tk.OptionMenu(root, w, "2018/2019") #needs to be on the root window
TaxYearLi.grid(row=1,column=1)

root.mainloop()

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2023-01-25
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多