为什么没有tk.IntVar在第二个tk窗口工作?

时间:2014-07-03 19:02:17

标签: python tkinter python-3.3 tk

我正在尝试使用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。

1 个答案:

答案 0 :(得分:4)

您不能在同一个线程中同时运行两个tkinter.Tk实例。他们不会正确地共享Tcl解释器,并且首先创建的解释器将始终充当主窗口。

要解决此问题,请将root2 tkinter.Toplevel的实例设为root2 = tk.Toplevel()

tkinter.Toplevel

tkinter.Tk窗口将取决于{{1}}窗口,这意味着它将共享为后者启动的Tcl解释器。

相关问题