我对 Tk 相对缺乏经验,但我之前做过一些简单的项目,这让我很难过:
我有一个代表时间滑块的比例小部件。threading.Timer 每隔一段时间就会关闭以移动比例小部件。按下按钮时,线程被禁用;在按钮上,线程被重新启用。因此,用户可以单击并拖动时间滑块来重新定位应用程序的“时间”。到目前为止,在 UI 操作期间禁用线程已经防止了我认为与线程安全有关的崩溃(看似不确定的崩溃,发生在线程试图更新滑块的时间)。
唯一的其他“活动” UI 元素是一系列按钮,这些按钮使用 command=fnc 参数进行配置。规模是我使用绑定()的唯一地方。该应用程序是全屏应用程序,因此我在根级别使用 self.root.overridedirect(1) 和 geometry() 来删除菜单和边框,并使其全屏显示。
我已经更改了代码,因此缩放小部件现在位于 Frame 内,而不是绝对根级别:
self.scale_timescrub = tkinter.Scale(self.root.master, from_=0, to=60, width=height_one, orient=tkinter.HORIZONTAL, showvalue=0)
self.scale_timescrub.grid(row=2,column=0,sticky=tkinter.N+tkinter.S+tkinter.E+tkinter.W)
self.scale_timescrub.bind('<Button-1>', self.press_scrub)
self.scale_timescrub.bind('<ButtonRelease-1>', self.release_scrub)
现在,每当我尝试使用缩放小部件进行任何 UI 操作时,应用程序都会挂起。按下滑块上的任何位置都会锁定 CPU,并且应用程序永远不会返回。我知道这与育儿有关,因为当我破解应用程序以将规模放回根级别时,它又可以工作了。当它是框架的父级时,小部件似乎永远不会进入它的绑定函数,如 press_scrub。
谁能告诉我我在这里做错了什么?
在 Windows 7 上运行 python 3.2.3 64b。