gpt4 book ai didi

python - 'weight' 在 tkinter 中有什么作用?

转载 作者:IT老高 更新时间:2023-10-28 21:00:45 25 4
gpt4 key购买 nike

我一直在搜索不同的网站,试图找出重量在 tkinter 中的作用。我是从 TkDocs 那里得到的:

Every column and row has a "weight" grid option associated with it, which tells it how much it should grow if there is extra room in the master to fill. By default, the weight of each column or row is 0, meaning don't expand to fill space.

有人可以帮我把它放在一些背景下,因为我正在努力理解它的作用。我已经尝试过以下代码,当我更改值时,它似乎只是在页面上移动内容。

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

这是窗口的样子:

window with no weights applied

它看起来那样的原因是因为 tkinter 被告知不要给任何列任何额外的空间,所以额外的空间在右边没有使用。

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

root.grid_columnconfigure(0, weight=1)

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

window with weight on first column only

发生了什么?因为第 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。

window with weight given to both columns

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

window after resizing

关于python - 'weight' 在 tkinter 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com