在Tkinter Mainwindow中的多个框架中使用网格管理器,调整问题大小

时间:2016-11-29 10:48:32

标签: python windows tkinter resize

我正在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,我有以下问题:

  1. 如何确保在调整主窗口大小时,小部件会随之调整大小?这是我现在面临的最大谜团。

    一个。所以,在FRAME 1中,我希望列表框和滚动条调整大小 相应地调整主窗口的大小。其他框架相同 小部件包含在其中。

    目前,小部件不会以任何方式调整大小。

  2. 在FRAME 1中,无论我设置Frame()的大小,列表框都会强制Frame()调整大小以适合列表框,除非我使用.grid_propagte(False)。 使用.grid_propagte(False)的缺点是什么?这将如何影响 调整主窗口大小时在FRAME 1中调整窗口小部件的大小?

  3. 对于FRAME 2,按钮不会显示。为什么呢?

0 个答案:

没有答案