Контрольные кнопки с несколькими окнами Tkinter - PullRequest
0 голосов
/ 17 июля 2011

Характеристики:
Python2.7.1
Tkinter (Tk версия 8.5)
Windows7
IDLE 2.7.1

Я пишу программу, которая «порождает» два окна,отзывает оба, уничтожает одно, а затем обескровливает другое (которое затем входит в основной цикл).
Это расположение мешает кнопке проверки в оставшемся окне.

например:

temp = Tk()
temp.withdraw()

root = Tk()
root.withdraw()
temp.destroy()

root.mainloop()

(Это кажется необычным, но оно настроено таким образом, чтобы в окне «temp» отображались проблемы, возникшие при создании корневого окна).

Однако, похоже, что сразуПрограмма работает с двумя окнами Tkinter, функциональность Checkbutton (в корне) выходит из окна.

def ClickAButton():
    print Toggle.get()
Toggle = IntVar()
Checkbutton(root, text = "Me is broke", variable = Toggle).pack()
ClickAButton

Toggle.get () должен возвращать 1, если Checkbutton отмечен, иначе 0.
Однако после добавления нового окна Toggle.get всегда возвращает 0.

(я пытался переформатировать код {это вызывает странные ошибки его собственного},
переименование переменных и т. Д.
Checkbutton работает просто отлично без тОкно «temp».

Окно «temp» разрушается до того, как кнопка «Check» была назначена, упакована,
или «root» даже входит в основной цикл!)

Весь, например:

temp = Tk()
temp.withdraw()
root = Tk()
root.withdraw()
if 'certain condition':
    root.destroy()
    temp.deiconify()
    temp.mainloop()
else:
    temp.destroy() 
    Toggle = IntVar()
    Checkbutton(root, text = "Why I only return 0?", variable = Toggle).pack()
    root.deiconify()
    root.mainloop()

По какой-то причине
Checkbutton всегда возвращает 0, даже если проверено.
Я подозреваю, что это многопоточность с Tkinter.

Есть что-нибудьвообще я могу сделать здесь?
(Фактическое кодирование ОГРОМНО.Я не хочу переключать все это на другой модуль с графическим интерфейсом): |

С благодарностью!

(Я только начал программировать в начале этого года.
Пожалуйста, прости меня, если ясовершил чудовищную ошибку!)

1 Ответ

1 голос
/ 17 июля 2011

Tkinter не имеет двух корневых окон.Я поражен, твой код работает вообще.Это не имеет ничего общего с многопоточностью - Tkinter является однопоточным, и вы не создаете никаких новых потоков (хотя, если это так, это может способствовать возникновению проблемы) /

Вам необходимосоздать одно корневое окно с одним основным циклом.Если вам нужно другое окно, создайте окно Toplevel - это именно то, для чего предназначен этот виджет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...