У меня относительно мало опыта работы с Tk, но я уже делал несколько простых проектов, и это поставило меня в тупик:
У меня есть виджет масштаба, который представляет ползунок времени. Threading.Timer срабатывает через определенные промежутки времени, чтобы перемещать виджет масштаба. При нажатии кнопки нить отключена; при нажатии кнопки поток снова активируется. Таким образом, пользователь может щелкнуть ползунок времени, чтобы изменить положение «времени» приложения. Отключение потока во время операции пользовательского интерфейса до сих пор предотвращало сбои, которые у меня были, которые, как я предполагал, были связаны с безопасностью потоков (по-видимому, недетерминированные сбои происходили примерно в то время, когда поток пытался обновить ползунок).
Единственными другими «активными» элементами пользовательского интерфейса являются кнопки, которые настраиваются с помощью параметра command=fnc. Масштаб - единственное место, где я использую bind(). Приложение является полноэкранным, поэтому я использую self.root.overridedirect(1) и геометрию() на корневом уровне, чтобы удалить меню и границы и сделать его полноэкранным.
Я изменил код, поэтому виджет масштабирования теперь находится внутри фрейма, а не на абсолютном корневом уровне:
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)
Теперь приложение зависает всякий раз, когда я пытаюсь выполнить какие-либо операции пользовательского интерфейса с виджетом масштабирования. Нажатие в любом месте ползунка привязывает процессор, и приложение никогда не возвращается. Я знаю, что это связано с воспитанием детей, потому что, когда я взламываю приложение, чтобы вернуть масштаб на корневой уровень, оно снова работает. Виджет, кажется, никогда не вводит свои связанные функции, такие как press_scrub, когда он связан с фреймом.
Может ли кто-нибудь посоветовать мне, что я делаю неправильно здесь?
Запуск Python 3.2.3 64b в Windows 7.