Dan*_*och 2 python tk-toolkit tkinter python-3.3
我正在尝试使用 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()
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我在 Mac 上使用 python 3.3。
小智 5
tkinter.Tk您不能在同一线程中同时运行两个实例。它们不会正确共享 Tcl 解释器,并且第一个创建的解释器将始终充当主窗口。
要解决该问题,请创建root2一个实例tkinter.Toplevel:
root2 = tk.Toplevel()
Run Code Online (Sandbox Code Playgroud)
该tkinter.Toplevel窗口将依赖于该窗口tkinter.Tk,这意味着它将共享为后者启动的 Tcl 解释器。
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |