[英]Python tkinter widgets get resized uneven when user resizes the window
[英]Tkinter frame resizes when I add widgets
我刚开始使用 Tkinter,但面临一个奇怪的问题,基本上,我希望我的应用程序看起来像这样
因此,为了做到这一点,我创建了两个Frames
,一个用于菜单项,另一个用于显示内容。 奇怪的是,当我用给定的宽度和高度初始化框架时,程序似乎按预期工作,但是当我在窗口内放置一些小部件时,它看起来像这样
有人可以向我解释这种奇怪的行为吗? 我错过了什么? 另外,我想提一下,当我将按钮添加到菜单框架时,宽度会改变以适应按钮宽度,反之亦然
app = tk.Tk()
app.resizable(False, False)
menu_frame_users = tk.Frame(app, width=200, background='red')
content_frame = tk.Frame(app, height=600, width=600, background='blue')
hello_label = tk.Label(menu_frame_users, text='Hello, User').grid(column=0, row=0, sticky='we')
view_profile_button = tk.Button(menu_frame_users, text="View Profile").grid(column=0, row=1, sticky='we')
invoices_button = tk.Button(menu_frame_users, text="Invoices").grid(column=0, row=2, sticky='we')
bookings_button = tk.Button(menu_frame_users, text="View bookings").grid(column=0, row=3, sticky='we')
tools_button = tk.Button(menu_frame_users, text="Search tools").grid(column=0, row=4, sticky='we')
test_label = tk.Label(content_frame, text='View profile')
test_label.grid(column=0, row=0, sticky='we')
menu_frame_users.grid(column=0, row=0, sticky='nswe')
content_frame.grid(column=1, row=0, sticky='nswe')
tkinter 中的框架将仅与其中包含的小部件一样大,除非您向行和列添加权重以使其扩展。
您可以通过设置窗口的大小,然后为适当的行和列添加权重来扩展框架。
app.geometry('500x400')
app.grid_columnconfigure(1, weight=1)
app.grid_rowconfigure(0, weight=1)
您可以调整窗口的大小,然后调整按钮的大小和位置,直到获得所需的布局。
您还可以使用:
app.grid_columnconfigure(1, minsize=300)
但是,这仅适用于列包含小部件时。
我不确定我是否完全理解这个问题,但也许这会有所帮助。 注意为了示例,我删除了显式框架尺寸。
import tkinter as tk
app = tk.Tk()
app.resizable(False, False)
menu_frame_users = tk.Frame(app,background='red')
content_frame = tk.Frame(app, background='blue')
app.geometry("500x500")
app.rowconfigure(0, weight=1)
app.columnconfigure(0, weight=1)
menu_frame_users.columnconfigure(0, weight=1)
hello_label = tk.Label(menu_frame_users, text='Hello, User').grid(column=0, row=0, sticky='we')
view_profile_button = tk.Button(menu_frame_users, text="View Profile").grid(column=0, row=1, sticky='we')
invoices_button = tk.Button(menu_frame_users, text="Invoices").grid(column=0, row=2, sticky='we')
bookings_button = tk.Button(menu_frame_users, text="View bookings").grid(column=0, row=3, sticky='we')
tools_button = tk.Button(menu_frame_users, text="Search tools").grid(column=0, row=4, sticky='we')
test_label = tk.Label(content_frame, text='View profile')
test_label.grid(column=0, row=0, sticky='we', padx=20, pady=20)
menu_frame_users.grid(column=0, row=0, sticky='nswe')
content_frame.grid(column=1, row=0, sticky='nswe')
app.mainloop()
tkinter 的文档有点有限,但此页面上有一些关于网格配置的重要信息。
一般来说,给定容器中的小部件是容器的尺寸,除非另有明确编码。 (换句话说,框架会随着您向其中添加内容而增长,而不是相反)
在您的示例中,我添加了任意窗口大小(您还可以在该字符串参数中指定偏移量)。 我的猜测是您正在寻找rowconfigure()
和columnconfigure()
。 此外,您可以添加一些填充以使用.grid()
我几乎只使用网格几何管理器,但有时您可能会发现使用pack()
或place()
更实用,只要确保不要同时使用两者。
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.