首页 > 解决方案 > Tkinter TopLevel 窗口没有显示它的内容

问题描述

我正在寻找一种通过单击带有自己的小部件的按钮来创建新窗口的方法我已经编写了这段代码,但是新窗口的内容没有显示:

SearchEntry按钮单击必须触发将使用来自 tkinter 的类创建具有搜索行的新窗口的功能

ui.py:

class App(tk.Frame):
def __init__(self, master=None):
    super().__init__(master)
    self.master = master
    self.grid()
    self.create_widgets()

def create_widgets(self):
    self.search_btn = tk.Button(self)
    self.search_btn["text"] = "Search"
    self.search_btn["command"] = self.on_search_button
    self.search_btn.grid(column=4, row=1, padx=5, pady=5, sticky="e")

    self.quit = tk.Button(self, text="QUIT", fg="red",
                          command=self.master.destroy)
    self.quit.grid(column=4, row=3, sticky="se")

def on_search_button(self):
    self.search_wnd = SearchWindow(self.master)


class SearchWindow(tk.Toplevel):
    def __int__(self, master):
        super().__init__(master)
        self.master = master
        self.create_widgets()

    def create_widgets(self):
        self.query = tk.StringVar()
        self.search_row = tk.Entry(self, textvariable=self.query)
        self.search_row["justify"] = "left"
        self.search_row.pack()
        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.pack()

主要.py:

import tkinter as tk
from ui import App

if __name__ == '__main__':
    root = tk.Tk()
    app = App(master=root)
    app.mainloop()  

标签: pythonuser-interfacetkinter

解决方案


所以你的主要问题是一个错字。

改变:

class SearchWindow(tk.Toplevel):
    def __int__(self, master):

至:

class SearchWindow(tk.Toplevel):
    def __init__(self, master):

那就是说我会改变一些事情。你用完了self.。仅当您需要将某些内容设置为类属性时才需要这样做。

您也不需要使用任何几何管理器,Toplevel因为这是它自己的窗口。

这是您的示例的清理版本:

import tkinter as tk


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        tk.Button(self, text="Search", command=SearchWindow).grid(column=4, row=1, padx=5, pady=5, sticky="e")
        tk.Button(self, text="QUIT", fg="red", command=self.destroy).grid(column=4, row=3, sticky="se")


class SearchWindow(tk.Toplevel):
    def __init__(self):
        super().__init__()
        self.query = tk.StringVar(self)
        tk.Entry(self, textvariable=self.query, justify='left').pack()
        tk.Button(self, text="QUIT", fg="red", command=self.master.destroy).pack()


if __name__ == '__main__':
    App().mainloop()

推荐阅读