我正在尝试使用tk.Scale来更改tk.IntVar。我可以在第一个tk窗口上进行,但我不能在第二个窗口上进行。为什么?
看看这个糟糕的样本:
import tkinter as tk
# main root
root = tk.Tk()
myvar = tk.IntVar()
def on_change(*args):
print("Value changed to {}".format(myvar.get()))
myvar.trace("w", on_change)
sc = tk.Scale(root, from_=1, to=10, orient=tk.HORIZONTAL, length=320, \
variable=myvar)
sc.grid()
# second root
root2 = tk.Tk()
myvar2 = tk.IntVar()
def on_change2(*args):
print("Value2 changed to {}".format(myvar2.get()))
myvar2.trace("w", on_change2)
sc2 = tk.Scale(root2, from_=1, to=10, orient=tk.HORIZONTAL, length=320, \
variable=myvar2)
sc2.grid()
root.mainloop()
我做错了什么? 我在Mac上使用python 3.3。
答案 0 :(得分:4)
您不能在同一个线程中同时运行两个tkinter.Tk
实例。他们不会正确地共享Tcl解释器,并且首先创建的解释器将始终充当主窗口。
要解决此问题,请将root2
tkinter.Toplevel
的实例设为root2 = tk.Toplevel()
:
tkinter.Toplevel
tkinter.Tk
窗口将取决于{{1}}窗口,这意味着它将共享为后者启动的Tcl解释器。