我正在Python / Tkinter中构建一个相当复杂的UI。以下描述了我的设置和问题。我已在网上广泛搜索,但未能找到类似或足够清晰的内容。我已经加入了一个MWE,这样每个人都可以受益。
GUI设置:
主窗口即Tk()
包括使用.place()
方法放置的多个帧。在框架内,我使用网格管理器来布置我的小部件。
我使用这种方法的原因是布局非常复杂,在主窗口中仅使用一个网格来安装我所有不同的小部件是不可行的。这种方法是否正确?欢迎您发表评论。
我在其下面加入了一个MWE,结构相同:
from tkinter import *
root = Tk();
root.geometry("500x500");
################################################################################
# FRAME 1
Frame_Listbox = Frame(root);
Frame_Listbox.place(relx=0.1, rely=0.05, height=200, width=250);
The_Listbox = Listbox(Frame_Listbox, height=5, width=20);
The_Listbox.grid(row=0, column=0, sticky="NSEW");
The_VScrollbar = Scrollbar(Frame_Listbox, orient=VERTICAL);
The_VScrollbar.grid(row=0, column=1, sticky="NSEW");
The_HScrollbar = Scrollbar(Frame_Listbox, orient=HORIZONTAL);
The_HScrollbar.grid(row=1, column=0, sticky="NSEW");
Frame_Listbox.rowconfigure(0, weight=2);
Frame_Listbox.rowconfigure(1, weight=1);
Frame_Listbox.columnconfigure(0, weight=6);
Frame_Listbox.columnconfigure(1, weight=1);
################################################################################
# FRAME 2
Frame_Text = Frame(root);
Frame_Text.place(relx=0.1, rely=0.5, height=200, width=250);
The_Text = Text(Frame_Text);
The_Text.grid(row=0, column=0, sticky="NSEW");
The_Button = Button(Frame_Text, text="The Button");
The_Button.grid(row=1, column=0, sticky="NSEW");
Frame_Text.rowconfigure(0, weight=5);
Frame_Text.rowconfigure(1, weight=1);
Frame_Text.columnconfigure(0, weight=1);
################################################################################
# FRAME 3
Frame_Buttons = Frame(root);
Frame_Buttons.place(relx=0.7, rely=0.05, height=420, width=120);
Button_1 = Button(Frame_Buttons, text="Button 1");
Button_1.grid(row=0, column=0, sticky="NSEW");
Button_2 = Button(Frame_Buttons, text="Button 2");
Button_2.grid(row=1, column=0, sticky="NSEW");
Button_3 = Button(Frame_Buttons, text="Button 3");
Button_3.grid(row=2, column=0, sticky="NSEW");
Frame_Buttons.rowconfigure(0, weight=2);
Frame_Buttons.rowconfigure(1, weight=1);
Frame_Buttons.rowconfigure(2, weight=1);
Frame_Buttons.columnconfigure(0, weight=1);
################################################################################
root.mainloop();
的问题:
基于MWE,我有以下问题:
如何确保在调整主窗口大小时,小部件会随之调整大小?这是我现在面临的最大谜团。
一个。所以,在FRAME 1中,我希望列表框和滚动条调整大小 相应地调整主窗口的大小。其他框架相同 小部件包含在其中。
目前,小部件不会以任何方式调整大小。
在FRAME 1中,无论我设置Frame()
的大小,列表框都会强制Frame()
调整大小以适合列表框,除非我使用.grid_propagte(False)
。
使用.grid_propagte(False)
的缺点是什么?这将如何影响
调整主窗口大小时在FRAME 1中调整窗口小部件的大小?
对于FRAME 2,按钮不会显示。为什么呢?