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