Python Tkinter 顶层

标签 python tkinter window

我正在开发一个需要多个窗口的程序,第一个出现的是登录窗口,我使用了 Toplevel 小部件以使其他窗口成为其子窗口,但这段代码一直显示两个窗口而不是一个。

from Tkinter import Frame, Toplevel
from ttk import Label, Entry, Button


class loginWindow(Toplevel):
    def __init__(self):
        Toplevel.__init__(self)
        self.title("Title")
        self.frame = Frame(self)
        self.frame.pack()
        self.__make_layout()
        self.mainloop()

    def __make_layout(self):
        self.frame.user_name_label = Label(text="User name:")
        self.frame.user_name_text = Entry()
        self.frame.user_name_label.grid(row=0, column=0)
        self.frame.user_name_text.grid(row=0, column=1)
        self.frame.password_label = Label(text="Password:")
        self.frame.password_text = Entry()
        self.frame.password_label.grid(row=1, column=0)
        self.frame.password_text.grid(row=1, column=1)
        self.frame.login_button = Button(text="Login")# , command=self.__create_window)
        self.frame.login_button.grid(row=2, column=0, columnspan=2)


if __name__ == '__main__':
    win1 = loginWindow()

最佳答案

_make_layout 中创建的所有小部件都是在没有父级的情况下创建的。这意味着他们是默认根的 child 。您需要将父级传递给它们中的每一个,就像您对 Frame 所做的一样。像这样:

self.frame.user_name_label = Label(self.frame, text="User name:")
self.frame.user_name_text = Entry(self.frame)
# etc.

当我运行您的确切代码时,在我尝试的任何平台上都没有出现第二个窗口。我得到的最接近的是在 OS X 上,其中默认根窗口的条目出现在窗口菜单中,但窗口本身仍然没有出现并且小部件都在 Toplevel 上结束(尽管不在 Frame 你想要它们的地方)。但是 Tkinter 在此处显示第二个窗口并将您的部分或全部小部件放在上面肯定是合法的。

关于Python Tkinter 顶层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984830/

相关文章:

linux - 在 Xlib 窗口下生成阴影

python - 使列表值成为列表的变量

python - 按日期范围内的日期计算对象数量

python - 字典总是在 python 中存储哈希的最有效方式吗?

python - 如何在 tkinter 应用程序中设置 Tab 键顺序?

python - 将几何网格应用于 tkinter Notebook 页面中的小部件时出现问题

WPF - 隐藏窗口的最小化按钮

python - 如何分发我的 Python/shell 脚本?

python - 文本小部件中是否有用于加入撤消/重做堆栈的 Python Tkinter 方法?

javascript - Selenium:弹出窗口未显示在窗口句柄中