tkinter 中的“weight”起什么作用?

2025-01-21 09:01:00
admin
原创
81
摘要:问题描述:我一直在搜索不同的网站,试图找出 tkinter 中的 weight 是什么。我从TkDocs中得到了这个:每列和每行都有一个与之关联的“权重”网格选项,该选项告诉它如果主表中有多余的空间需要填充,它应该增长多少。默认情况下,每列或每行的权重为 0,表示不会扩展以填充空间。有人能帮我解释一下这个吗,...

问题描述:

我一直在搜索不同的网站,试图找出 tkinter 中的 weight 是什么。我从TkDocs中得到了这个:

每列和每行都有一个与之关联的“权重”网格选项,该选项告诉它如果主表中有多余的空间需要填充,它应该增长多少。默认情况下,每列或每行的权重为 0,表示不会扩展以填充空间。

有人能帮我解释一下这个吗,因为我很难理解它的作用。我试验了以下代码,它似乎只是在我更改值时在页面上移动内容。

try:
    import tkinter
except ImportError:  # python 2
    import Tkinter as tkinter

import os

mainWindow = tkinter.Tk()

mainWindow.title("Grid demo")
mainWindow.geometry('640x480-8-200')

label = tkinter.Label(mainWindow, text="tkinter grid demo")
label.grid(row=0, column=0, columnspan=3)

mainWindow.columnconfigure(0, weight=1)
mainWindow.columnconfigure(1, weight=1)
mainWindow.columnconfigure(2, weight=3)
mainWindow.columnconfigure(3, weight=3)
mainWindow.columnconfigure(4, weight=3)
mainWindow.rowconfigure(0, weight=1)
mainWindow.rowconfigure(1, weight=10)
mainWindow.rowconfigure(2, weight=1)
mainWindow.rowconfigure(3, weight=3)
mainWindow.rowconfigure(4, weight=3)

fileList = tkinter.Listbox(mainWindow)
fileList.grid(row=1, column=0, sticky='nsew', rowspan=2)
fileList.config(border=2, relief='sunken')

for zone in os.listdir('/Windows/System32'):
    fileList.insert(tkinter.END, zone)
mainWindow.mainloop()

解决方案 1:

用最简单的术语来说,非零权重会导致行或列在有额外空间时增长。默认值为零权重,这意味着如果有额外空间,列将不会增长。

考虑以下代码,它创建一个比里面的小部件更大的窗口,并且其中没有任何列具有权重:

import tkinter as tk

root = tk.Tk()
root.geometry("200x100")

f1 = tk.Frame(root, background="bisque", width=10, height=100)
f2 = tk.Frame(root, background="pink", width=10, height=100)

f1.grid(row=0, column=0, sticky="nsew")
f2.grid(row=0, column=1, sticky="nsew")

root.grid_columnconfigure(0, weight=0)
root.grid_columnconfigure(1, weight=0)

root.mainloop()

注意:columnconfigure是 的别名grid_columnconfigure。我在这里使用了较长的形式,因为我认为它更清楚。

窗口如下所示:

未应用任何权重的窗口

之所以看起来是这样,是因为 tkinter 被告知不要给任何列提供任何额外的空间,因此额外的空间在右侧未被使用。

现在,更改代码,以便我们只为一个列赋予权重:

root.grid_columnconfigure(0, weight=1)

当我们重新启动时,我们现在有一个如下所示的窗口:

仅在第一列有权重的窗口

发生了什么?因为第 0 列的权重为 1,所以 tkinter 将额外的空间分配给了这一列。您可以将权重设置为 1、100、100000,结果相同。在这种情况下,所有额外的空间都分配给了这一列。

如果为两列赋予权重,会发生什么情况?额外的空间将根据其权重在两列之间进行分配。例如,假设您希望左侧的导航区域占据屏幕的 1/4,主区域应占据屏幕的 3/4(1:3 的比例)。

我们将权重改成如下形式:

root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=3)

由于两列都有权重,因此会为两列分配额外的空间。每增加 4 个像素的额外空间,第 0 列将获得 1 个像素,第 1 列将获得另外 3 个像素。

对两列赋予权重的窗口

此外,如果您以交互方式调整窗口大小,则比例会尽可能保持。以下是我手动调整为更宽的同一窗口:

调整大小后的窗口

解决方案 2:

这只是比例。如果您有两列,例如column1column2,并且您将权重设置column13column25column1占用3 / (3 + 5)column2占用5 / (3 + 5)可用空间。如果您将它们设置为零,它们将根本不会扩展以填充空间,这是默认设置。

提示:权重参数必须是整数类型。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用