Tkinter 网格几何管理器权重配置无法正常工作

问题描述 投票:0回答:1

我想将我的用户界面分为 4 个部分,即搜索、唱片目录、信息、数据和图表。每个部分都继承自 tk.Frame,其中包含一堆组件。我使用网格作为我的几何管理器。搜索和唱片目录位于信息列上,数据分别位于 1,2 列上。我希望我的 UI 显示屏幕的一半数据,所以我将第 0、1 列的权重设置为 1,将第 2 列的权重设置为 2。但结果不是我预期的。

UI

看起来第 0 列和第 1 列填充了很多空间,而第 2 列没有像应有的那样扩展

这是我与放置组件相关的代码

class GUI(tk.Tk):
    """Main GUI class"""

    def __init__(self):
        super().__init__()

        self.controller = None
        self.search = Searching(self)
        self.info = ArtistInfo(self)
        self.data = DataStoryTelling(self)
        self.disco = Dicography(self)
        self.progress = ttk.Progressbar(
            self,
            orient='horizontal',
            mode='indeterminate',
        )

        self.init_component()

    def set_controller(self, controller: 'Controller'):
        self.controller = controller

    def init_component(self):
        """Arrange component"""

        # search section arrange
        # ========================================================================================
        self.search.grid(row=0, column=0, sticky='news')
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=20)

        self.search.search_button.bind('<Button-1>', self.search_handler)
        self.search.detail_button.bind('<Button-1>', self.artist_selected)
        self.search.entry.bind('<Return>', self.search_handler)

        # Discography section arrange
        # ========================================================================================
        self.disco.grid(row=1, column=0, sticky='news')
        self.grid_rowconfigure(1, weight=20)

        # info section arrange
        # ========================================================================================
        self.info.grid(row=0, column=1, rowspan=2, sticky='news')
        self.grid_columnconfigure(1, weight=1)

        # Data story telling section arrange
        # ========================================================================================
        self.data.grid(row=0, column=2, rowspan=3, sticky='news')
        self.grid_columnconfigure(2, weight=2)

我尝试删除每个部分中的某些元素以找到效果大小,但它仍然很奇怪并且不像我的预期是否有正确安排它?

python tkinter
1个回答
0
投票

重量本身仅告诉

grid
如何处理额外空间。如果您有两列包含不同大小的小部件,并且您调整窗口大小以便有额外的空间,
grid
会将额外的空间分配给每列,但不能确保每列的大小相同。

但是,如果将

uniform
选项设置为
1
grid
会将行或列调整为统一大小。来自文档:

uniform 选项,当提供非空值时,将该列与具有相同 uniform 值的其他列放在一个统一组中。属于统一组的列的空间被分配,以便它们的大小始终与其weight

严格成比例

有关

grid
如何管理行和列大小的全面说明,请参阅 如何使用 tkinter 的网格几何管理器拉伸窗口?

© www.soinside.com 2019 - 2024. All rights reserved.