我想将我的用户界面分为 4 个部分,即搜索、唱片目录、信息、数据和图表。每个部分都继承自 tk.Frame,其中包含一堆组件。我使用网格作为我的几何管理器。搜索和唱片目录位于信息列上,数据分别位于 1,2 列上。我希望我的 UI 显示屏幕的一半数据,所以我将第 0、1 列的权重设置为 1,将第 2 列的权重设置为 2。但结果不是我预期的。
看起来第 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)
我尝试删除每个部分中的某些元素以找到效果大小,但它仍然很奇怪并且不像我的预期是否有正确安排它?
重量本身仅告诉
grid
如何处理额外空间。如果您有两列包含不同大小的小部件,并且您调整窗口大小以便有额外的空间,grid
会将额外的空间分配给每列,但不能确保每列的大小相同。
但是,如果将
uniform
选项设置为 1
,grid
会将行或列调整为统一大小。来自文档:
uniform 选项,当提供非空值时,将该列与具有相同 uniform 值的其他列放在一个统一组中。属于统一组的列的空间被分配,以便它们的大小始终与其weight值
严格成比例
有关
grid
如何管理行和列大小的全面说明,请参阅 如何使用 tkinter 的网格几何管理器拉伸窗口?