Представление экземпляров tk с помощью Tk.mainloop () - PullRequest
0 голосов
/ 14 января 2019

Я программирую симулятор yahtzee (для обучения) и хотел бы, чтобы несколько экранов (экземпляров tkinter) работали одновременно, но я не хочу, чтобы они запускались одновременно, и я не могу понять, почему они начать в то же время.

Я почти ничего не пробовал, кроме поиска в Google, я новичок в программировании tkinter ...

from tkinter import *
Screen1 = Tk()
screen2 = Tk()

Screen1.mainloop()

Я ожидал, что будет показан только screen1, но они оба будут показаны, любая помощь?

1 Ответ

0 голосов
/ 14 января 2019

Вы явно создаете два окна, поэтому появляются два окна.

Вы никогда не должны создавать более одного экземпляра Tk. Если вам нужно несколько окон, второе и последующие окна должны быть экземплярами Toplevel. Вам нужно всего лишь один раз вызвать mainloop - это не то, что создает окна, это просто механизм, с помощью которого окна могут реагировать на события. Один вызов mainloop - это все, что вам нужно, независимо от того, сколько у вас окон.

Причина этого основана на том, как реализован tkinter - tkinter представляет собой тонкую оболочку для встроенного интерпретатора tcl (совершенно другой среды языка программирования), и каждый экземпляр получает свой собственный интерпретатор. Это означает, что все виджеты и переменные tkinter (StringVar и т. Д.) В одном экземпляре невидимы и недоступны для любого другого экземпляра.

Если вы хотите создать дополнительные окна, но изначально они скрыты, вы можете вызвать метод withdraw в любом окне, которое хотите скрыть.

...