从另一个 Tk 实例调用 Tk 实例会导致问题设置文本变量
Calling a Tk instance from another Tk instance causes issue setting textvariables
我使用 Tkinter
和 ttk
构建了一个简单的用户下拉菜单。我使用 textvariable.set()
在加载时为 window 设置默认值。一切都很好。代码如下。
from Tkinter import *
import ttk
parent = Tk()
myvalue = StringVar()
user_entry1 = ttk.Combobox(parent, values=['value 1', 'value2'], textvariable=myvalue)
user_entry1.pack()
myvalue.set('default value')
mainloop()
我现在想变得更复杂一些,并使用另一个名为 root
的 Tk()
实例来生成我的 parent
Tk()
实例。一切似乎都正常,预计下拉列表的默认值不会显示。正如 print myvalue.get()
所证明的那样,它确实被分配给了文本变量。我在这里错过了什么?
from Tkinter import *
import ttk
root = Tk()
def load_dropdown():
parent = Tk()
myvalue = StringVar()
user_entry1 = ttk.Combobox(parent, values=['value 1', 'value2'], textvariable=myvalue)
user_entry1.pack()
myvalue.set('default value')
print myvalue.get()
parent.mainloop()
b = Button(root, text="Generate Dropdown ", command=load_dropdown)
b.pack()
root.mainloop()
您不能在 tkinter 应用程序中多次使用 Tk
实例。您正在观察尝试这样做的负面影响之一。
如果您需要第二个 window,请创建 Toplevel 的实例而不是 Tk
的第二个实例。
在 tkinter 中,你只能创建一个主循环,由
root = Tk()
这是您的默认设置 window。如果您摆脱了 parent 的第二次创建,您的示例将起作用。
要创建更多 windows 使用 new_window = TopLevel()
关于 tkinter 有很多很好的文档,利用它会让你走得更远:)
http://effbot.org/tkinterbook/toplevel.htm
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/toplevel.html
有两个 Tk
实例会混淆它。如果您希望在单独的顶层 window 中显示内容,请改为调用 Toplevel()
即可。
def load_dropdown():
parent = Toplevel() # <- change to this
myvalue = StringVar()
...
我使用 Tkinter
和 ttk
构建了一个简单的用户下拉菜单。我使用 textvariable.set()
在加载时为 window 设置默认值。一切都很好。代码如下。
from Tkinter import *
import ttk
parent = Tk()
myvalue = StringVar()
user_entry1 = ttk.Combobox(parent, values=['value 1', 'value2'], textvariable=myvalue)
user_entry1.pack()
myvalue.set('default value')
mainloop()
我现在想变得更复杂一些,并使用另一个名为 root
的 Tk()
实例来生成我的 parent
Tk()
实例。一切似乎都正常,预计下拉列表的默认值不会显示。正如 print myvalue.get()
所证明的那样,它确实被分配给了文本变量。我在这里错过了什么?
from Tkinter import *
import ttk
root = Tk()
def load_dropdown():
parent = Tk()
myvalue = StringVar()
user_entry1 = ttk.Combobox(parent, values=['value 1', 'value2'], textvariable=myvalue)
user_entry1.pack()
myvalue.set('default value')
print myvalue.get()
parent.mainloop()
b = Button(root, text="Generate Dropdown ", command=load_dropdown)
b.pack()
root.mainloop()
您不能在 tkinter 应用程序中多次使用 Tk
实例。您正在观察尝试这样做的负面影响之一。
如果您需要第二个 window,请创建 Toplevel 的实例而不是 Tk
的第二个实例。
在 tkinter 中,你只能创建一个主循环,由 root = Tk()
这是您的默认设置 window。如果您摆脱了 parent 的第二次创建,您的示例将起作用。
要创建更多 windows 使用 new_window = TopLevel()
关于 tkinter 有很多很好的文档,利用它会让你走得更远:)
http://effbot.org/tkinterbook/toplevel.htm
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/toplevel.html
有两个 Tk
实例会混淆它。如果您希望在单独的顶层 window 中显示内容,请改为调用 Toplevel()
即可。
def load_dropdown():
parent = Toplevel() # <- change to this
myvalue = StringVar()
...