繁体   English   中英

添加小部件时 Tkinter 框架会调整大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM