Вы не можете создать два экземпляра класса Tk
, и несколько необычно создавать его экземпляр в __init__
другого класса. Ваш код должен работать, но я никогда не видел, чтобы это делалось таким образом.
Вам необходимо создать экземпляр Tk
перед созданием любых других виджетов. Поскольку ваше основное приложение является подклассом Frame
, вы частично создаете экземпляр Frame
перед инициализацией Tkinter, что просто не так, как должно быть. Это может работать, но поведение не определено.
Вместо этого, как правило, лучше создать приложение в качестве подкласса Tk:
from Tkinter import tk
class Application(tk.Tk):
...
app = Application(...)
app.mainloop()
ИЛИ, создайте экземпляр Tk
в глобальной области и передайте его в качестве аргумента другим виджетам:
from Tkinter import tk
class Application(tkFrame):
...
root = tk.Tk()
myframe = Application(root)
root.mainloop()
Если вам нужно более одного окна, создайте дополнительные окна с классом Toplevel
.