我正在尝试使用tkinter创建一个简单的应用程序来显示一个"输入密码"启动时的小窗口。但最奇怪的行为开始发生......
mainWindow.py
import tkinter as tk
import password
class mainWindow(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("mainWindow")
self.geometry("{0}x{1}+20+20".format(50,50))
if __name__ == "__main__":
mainW = mainWindow()
passW = password.passwordWindow()
passW.resizable(False, False)
passW.attributes("-topmost", True)
passW.mainloop()
password.py
将tkinter导入为tk import mainWindow
class passwordWindow(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("Password")
self.frame = tk.Frame(height=2, bd=1, relief=tk.SUNKEN)
self.frame.pack(fill=tk.X, padx=5, pady=5)
self.label = tk.Label(self.frame, text="This Label is packed\nin the Password's Frame.")
self.label.pack(fill=tk.BOTH, expand=1)
毋庸置疑,它不是理想的效果。 "标签"部分应该在密码窗口!任何线索为什么我得到这个结果?在此先感谢!!
答案 0 :(得分:2)
我能看到的第一个问题是你在这里使用Tk()
两次。而不是使用Tk()
用于新窗口而是使用Toplevel()
。在生成主窗口后,Toplevel用于创建新窗口。
接下来,我们需要将根窗口传递给密码类,以便我们可以将它用作主窗口实例的顶层。
简而言之,您的代码应如下所示:
<强> mainWindow.py 强>
import tkinter as tk
import password
class mainWindow(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("mainWindow")
self.geometry("{0}x{1}+20+20".format(50,50))
if __name__ == "__main__":
mainW = mainWindow()
passW = password.passwordWindow(mainW)
passW.resizable(False, False)
passW.attributes("-topmost", True)
mainW.mainloop()
<强> password.py 强>
import tkinter as tk
import mainWindow
class passwordWindow(tk.Toplevel):
def __init__(self, controller):
tk.Toplevel.__init__(self, controller)
self.title("Password")
self.frame = tk.Frame(self, height=2, bd=1, relief=tk.SUNKEN)
self.frame.pack(fill=tk.X, padx=5, pady=5)
self.label = tk.Label(self, text="This Label is packed\nin the Password's Frame.")
self.label.pack(fill=tk.BOTH, expand=1)
<强>结果:强>
http://www.advancesharp.com/blog/1211/angular-2-search-and-sort-with-ngfor-repeater-with-example