Python3 tkinter - 在原始窗口中,类的新窗口为空白+新窗口内容

时间:2018-05-16 12:21:54

标签: python-3.x tkinter

我正在尝试使用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)

结果: uhhhh...

毋庸置疑,它不是理想的效果。 "标签"部分应该在密码窗口!任何线索为什么我得到这个结果?在此先感谢!!

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