python - Tkinter TopLevel 窗口没有显示它的内容
问题描述
我正在寻找一种通过单击带有自己的小部件的按钮来创建新窗口的方法我已经编写了这段代码,但是新窗口的内容没有显示:
Search
Entry
按钮单击必须触发将使用来自 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()
解决方案
所以你的主要问题是一个错字。
改变:
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()
推荐阅读
- php - 如何对齐 HTML 单元格值
- python - 如何使用 lambda(python) 从 CloudWatch 警报中获取特定值?
- r - for() 循环的返回值,就像它是 R 中的函数一样
- r - 按列表对象的名称合并数据框列表
- android - JsonFormat.printer().print() 不接受我的消息
- c++ - 将一系列元组解包成 n 元函数
- java - Java - 使用 HTTP2 发出多个请求
- android - 可以从本机代码(C/C++)请求相机权限吗?
- html - 将 XPATH 与 Walmart.com 表一起使用
- r - 导入多个 txt 文件并为每个文件写入具有相同名称的单个 xlsx 文件