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

弗雷德:

我一直在搜索其他网站,试图找出tkinter中的重量。我是从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()
布莱恩·奥克利(Bryan Oakley):

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

考虑以下代码,该代码创建的窗口大于内部的窗口小部件,并且没有任何列具有权重:

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

窗口如下所示:

没有权重的窗口

它看起来像这样的原因是因为已告知tkinter不要给任何列任何额外的空间,所以多余的空间将在右侧未使用。

现在,更改代码,以便仅对一列赋权:

root.grid_columnconfigure(0, weight=1)

重新启动时,现在将出现一个如下所示的窗口:

仅在第一列具有权重的窗口

发生了什么?由于零列的权重为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。

赋予两栏权重的窗口

此外,如果以交互方式调整窗口大小,则将尽可能保留比例。这是我手动将其调整为更大的窗口:

调整大小后的窗口

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章