Python 顶层窗口故障

Python 顶层窗口故障,python,tkinter,Python,Tkinter,我有一个主模块和另一个创建Toplevel对象的模块。当我尝试从第一个模块调用最后一个模块时,我没有看到文本小部件或按钮小部件,但几何图形和标题正在工作: 当尝试将第二个模块称为主模块时,我看到两个窗口,第一个窗口带有几何图形和标题,第二个窗口带有按钮,文本和错误标题(tk) 这是我的主要模块 import tkinter as tk from Calendar import show_calendar from Notes_widget import show_notes_widget

我有一个主模块和另一个创建
Toplevel
对象的模块。当我尝试从第一个模块调用最后一个模块时,我没有看到
文本
小部件或
按钮
小部件,但几何图形和标题正在工作:

当尝试将第二个模块称为主模块时,我看到两个窗口,第一个窗口带有几何图形和标题,第二个窗口带有
按钮
文本
和错误标题(tk)

这是我的主要模块

import tkinter as tk
from Calendar import show_calendar
from Notes_widget import show_notes_widget

class MainMenu(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.init_main()

        # Настройка фрейма на главном окне
    def init_main(self):
        self.btn1 = tk.Button(text='Выбрать дату', width=20, height=3, command=show_calendar)
        self.btn2 = tk.Button(text='Ввести задачу', width=20, height=3, command=show_notes_widget)

        self.btn1.pack()
        self.btn2.pack()


if __name__ == '__main__':
    # Создание главного окна
    root = tk.Tk()

    # Создание фрейма на главном окне
    app = MainMenu(root)
    app.pack()

    # Настройка параметров главного окна
    root.title('ИВРО')
    root.width = 180
    root.height = 110
    root.x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
    root.y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
    root.geometry(f'{root.width}x{root.height}+{int(root.x - root.width / 2)}+{int(root.y - root.height / 2)}')
    root.resizable(False, False)

    root.mainloop()
还有一个

import tkinter as tk

class NotesWidget(tk.Toplevel):
    def __init__(self):
        tk.Toplevel.__init__(self)
        self.init_child()

    def init_child(self):
        self.title("Введите заметку")
        self.btn = tk.Button(text='Hello')
        self.btn.pack()
        self.text = tk.Text(bg="darkgreen", fg='white')
        self.text.pack()
        self.geometry('800x800')
        self.grab_set()
        self.focus_set()


def show_notes_widget(): 
    notes_widget=NotesWidget()
    notes_widget.mainloop()
我认为问题就在这里

def __init__(self):
    tk.Toplevel.__init__(self)

对于案例1:这是因为您没有指定
按钮
文本
小部件的父级,因此它们将是根窗口的子级,而不是
顶级
窗口。创建父对象时,应指定父对象:

将tkinter作为tk导入
类NotesWidget(tk.Toplevel):
定义初始化(自):
tk.Toplevel.\uuuuu初始化\uuuuuuuuu(自)
self.init_child()
def初始子项(自身):
自我名称(“ззззззззззззз”)
self.btn=tk.Button(self,text='Hello')#指定父项
self.btn.pack()
self.text=tk.text(self,bg=“暗绿色”,fg=“白色”)#指定父级
self.text.pack()
自几何体('800x800')
self.grab_set()
self.focus_set()
def show_notes_widget():
notes_widget=NotesWidget()
notes_widget.mainloop()

对于案例2:这是因为当您创建
Toplevel
窗口时,
窗口(Tk()的实例)将为您隐式创建。

对于案例1:这是因为您没有指定
按钮
文本
小部件的父窗口,因此它们将是根窗口的子窗口,而不是
Toplevel
窗口。创建父对象时,应指定父对象:

将tkinter作为tk导入
类NotesWidget(tk.Toplevel):
定义初始化(自):
tk.Toplevel.\uuuuu初始化\uuuuuuuuu(自)
self.init_child()
def初始子项(自身):
自我名称(“ззззззззззззз”)
self.btn=tk.Button(self,text='Hello')#指定父项
self.btn.pack()
self.text=tk.text(self,bg=“暗绿色”,fg=“白色”)#指定父级
self.text.pack()
自几何体('800x800')
self.grab_set()
self.focus_set()
def show_notes_widget():
notes_widget=NotesWidget()
notes_widget.mainloop()
对于案例2:这是因为当您创建
Toplevel
窗口时,将隐式地为您创建
root
窗口(
Tk()
的实例)