Tkinter 登录页面布局问题 - Python
Posted
技术标签:
【中文标题】Tkinter 登录页面布局问题 - Python【英文标题】:Tkinter login page layout problem - Python 【发布时间】:2022-01-19 10:37:03 【问题描述】:我正在尝试使用.pack()
在 Tkinter 中创建一个登录页面。我想将loginFrame
放在小窗口的中心。在loginFrame
中,用户名部分位于密码部分的顶部。
def main():
window = tk.Tk()
window.geometry("400x200")
window.title("PySploit")
window.resizable(False, False)
window.configure(background="#E1E5F2")
loginFrame = tk.Frame(window).pack(anchor="center")
usernameFrame = tk.Frame(loginFrame).pack(side=LEFT)
passwordFrame = tk.Frame(loginFrame).pack(side=LEFT)
tk.Label(usernameFrame, text="Username").pack(side=LEFT)
tk.Entry(usernameFrame, name="username").pack(side=LEFT)
tk.Label(passwordFrame, text="Password").pack(side=LEFT)
tk.Entry(passwordFrame, name="password").pack(side=LEFT)
window.mainloop()
return
if __name__ == "__main__":
main()
这是我的错误输出:
【问题讨论】:
请注意,loginFrame
、usernameFrame
和 passwordFrame
是 None
,因为这个问题是 question。所以这些标签和条目实际上是在根窗口中。
【参考方案1】:
对于您的要求,您不需要usernameFrame
和passwordFrame
,只需loginFrame
就足够了。
您可以使用place()
将loginFrame
放在窗口的中心,然后使用grid()
将这些标签和按钮放在loginFrame
内:
import tkinter as tk
def main():
window = tk.Tk()
window.geometry("400x200")
window.title("PySploit")
window.resizable(False, False)
window.configure(background="#E1E5F2")
loginFrame = tk.Frame(window)
# place loginFrame at the center of window
loginFrame.place(relx=0.5, rely=0.5, anchor='c')
# use grid() instead of pack() to lay out labels and entries
tk.Label(loginFrame, text="Username").grid(row=0, column=0)
tk.Entry(loginFrame, name="username").grid(row=0, column=1)
tk.Label(loginFrame, text="Password").grid(row=1, column=0)
tk.Entry(loginFrame, name="password").grid(row=1, column=1)
window.mainloop()
if __name__ == "__main__":
main()
【讨论】:
以上是关于Tkinter 登录页面布局问题 - Python的主要内容,如果未能解决你的问题,请参考以下文章