tkinter 中的“权重”有什么作用?

2024-02-14

我一直在搜索不同的网站,试图找出权重在 tkinter 中的作用。我从那里得到这个TkDocs http://www.tkdocs.com/tutorial/grid.html:

每列和行都有一个与之关联的“权重”网格选项,该选项告诉它如果母版中有额外的空间需要填充,它应该增长多少。默认情况下,每列或行的权重为 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()

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

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

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()

Note: 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)

由于两列都有重量,因此为两列提供了额外的空间。对于每四个像素的额外空间,第 0 列将获得 1 个像素,第 1 列将获得其他 3 个像素。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tkinter 中的“权重”有什么作用? 的相关文章

随机推荐

  • Flutter:ListView 项目之间的奇怪间隙

    我在使用 Flutter 和 ListView 小部件时遇到了一个奇怪的问题 我可以看到我的物品之间存在间隙 我可以看到黑色背景 我是否遗漏了一些东西 以致这些间隙不显示出来 这是整个应用程序代码 import package flutte
  • Python迭代对象列表“不可迭代”

    Python 新手 但我已经研究了几个小时 如果我错过了一些明显的事情 请原谅我 我有一个名为 LineItem 的类 它有一个属性 lineItems 即属于给定 LineItem 的 LineItem 列表 基本上是一个子列表 我想打印
  • ipython 笔记本中的 Unicode

    我正在尝试从 ipython 笔记本中获取 matplotlib 图中的 度 符号 当我跑步时 ax plt gca ax set xlabel something at 55 unicode xc2 errors replace ax p
  • 如何在文本板中使用正则表达式逐行删除指定字符后的任何内容?

    假设我在 Textpad 中有以下文本 kwejkewrjl ksajdlakj e833ekjh skdjkahak 2098e123809 ksjdkas dkjwhfdkjqhio skjddksjal 98a09asfdsaok k
  • 矢量化 SciPy ode 求解器

    我的问题是关于当前的 scipy ode 求解器 来自scipy 文档页面 http docs scipy org doc scipy reference generated scipy integrate ode html scipy i
  • Linq 中的 ToList 方法

    如果我没记错的话 ToList 方法会迭代提供的集合的每个元素 并将它们添加到 List 的新实例中并返回此实例 假设一个示例 using linq list Students Where s gt s Name ABC ToList tr
  • 为什么将 min 和 max 列为序列运算?

    Python 的文档中有一个表格 其中包含 常用序列操作 https docs python org 3 library stdtypes html common sequence operations 大多数序列类型都支持 它列出了例如x
  • Android 中使用 Google API 的依赖 apache HTTP 客户端

    我一直在使用 Google Play 服务库 仅通过 Google 登录 效果很好 但现在我想将日历 API 包含到我的应用程序中 我正在关注本教程 https developers google com google apps calen
  • 使用 wsdl2java/Apache CXF 生成 Web 服务代理类

    我正在尝试使用 Apache CXF 附带的 wsdl2java 工具生成 Web 服务代理 生成本身似乎一切顺利 但生成的文件中存在一些错误 调用了不存在的构造函数 该文件提供了解决方案 This constructor requires
  • 以编程方式生成 Apache Spark 中数据帧的架构和数据

    我想动态生成一个包含报告标题记录的数据帧 因此根据以下字符串的值创建一个数据帧 val headerDescs String Name Age Location val headerSchema StructType headerDescs
  • 将 HTTP 请求标头键值获取到条件检查中

    我已在 Azure 门户中创建了一个逻辑应用程序 它是由 HTTP POST 触发的 在该 POST 中我设置了一个名为 jmb private key 的密钥 逻辑应用程序收到 HTTP 请求后 我放置了一个条件 我想检查其密钥 检查He
  • .class 样式到 .class B 样式可以轻松制作动画吗?

    有没有一种方法可以在 Jquery 中设置动画而无需指定每个属性 让我们说 classA color red classB color blue function animate selector classA classB time st
  • 猫头鹰的含义:有值吗?

    一个的含义是什么owl hasValue限制 以及它与owl allValuesFrom and owl someValuesFrom 在本体论中 我想写一个公理 每个拥有文凭的人都是有文化的 我该怎么写这个 不同类型的限制类别 考虑一个个
  • Microsoft Bot 中的相同线程重复欢迎消息

    我有一条欢迎消息 配置为在我的机器人第一次启动时出现在 MessagesController 中 private Activity HandleSystemMessage Activity message if message Type A
  • Perl 是否有计算字符串中匹配项数量的快捷方式?

    假设我有 my string one two three four 我应该如何利用上下文来获取模式找到匹配项的次数 3 这可以使用单行完成吗 我试过这个 my number scalar string gi 我认为通过加上括号 number
  • 通过 Graph API 评论 Facebook 页面评级(评论)

    长期潜伏者第一次海报 我们正在与 Facebook API 合作 将其集成到我们的网络应用程序中 并且我们能够通过 page id ratings 部分中的 open graph story 参数获取公司页面评级 但是我们找不到评论 回复的
  • Buffer.BlockCopy 与不安全的 byte* 指针复制

    复制字节块时哪个性能更好 Buffer BlockCopy非常优化 它基本上是原始内存副本的包装器 所以它应该非常快 并且避免弄乱指针和unsafe代码 它应该是默认的 你当然可以用各种方式来衡量
  • HList 选项的幂集

    我正在玩 Shapeless 我正在尝试计算 某种 powerset https en wikipedia org wiki Power set of an HList of Options 基本上 我想解释一下HList作为一个集合 在这
  • Angular2 /错误:找不到集合

    我对 Angular2 很陌生 正在尝试构建一个 Todo 应用程序 这是我的文件结构 My todo service ts代码 里面shared folder import Injectable from angular core imp
  • tkinter 中的“权重”有什么作用?

    我一直在搜索不同的网站 试图找出权重在 tkinter 中的作用 我从那里得到这个TkDocs http www tkdocs com tutorial grid html 每列和行都有一个与之关联的 权重 网格选项 该选项告诉它如果母版中