具有相同行和列的 Tkinter 网格布局管理器行为是什么?

我正在查看 Tkinter 的文档,我很好奇小部件在使用grid布局管理器具有相同的行和列时的行为是什么。


据我所知,这是网络上最详细的解释:


列和行

使用网格,小部件被分配一个“列”号和一个“行”号,表示它们彼此的相对位置。因此,同一列中的所有小部件将彼此上方或下方,而同一行中的小部件将彼此左侧或右侧。


列号和行号必须是整数,第一列和第一行从0开始。可以在列号和行号之间留空(例如第0、1、2、10、11、12、20、21列),方便如果您打算稍后在用户界面中间添加更多小部件。


每列的宽度(或每行的高度)取决于列或行中包含的小部件的宽度或高度。这意味着在勾画您的用户界面并将其分为行和列时,您无需担心每列或每行的宽度相等。


(2018 年 11 月 21 日从https://tkdocs.com/tutorial/grid.html检索)


【强调我的】


但是,它并不清楚同一列和行中的小部件会发生什么。似乎也没有grid(**options)可以指定单元格中放置冲突小部件的位置,尽管sticky可能有一些交互。


Tkinter 的grid布局管理器是否按声明的顺序从左到右和从上到下放置“碰撞”小部件?当根小部件(通常是框架或窗口)调整大小时,包含多个小部件的单元格的行为如何?是否有一种机制可以在发生冲突时覆盖默认行为?


编辑:我用来测试行为的代码。似乎只显示了最后一个标签。


import tkinter, random


root = tkinter.Tk()

root.title('Widget Collision Test - Grid Layout')


labels = []

for i in range(3):

    labels.append(tkinter.Label(root, text=str(i+1)))

    labels[i].grid(

        row=0, column=0,

        padx=50, pady=50,

        sticky=random.choice('N W S E'.split()))


root.mainloop()


慕神8447489
浏览 100回答 1
1回答

慕侠2389804

Tkinter 的网格布局管理器是否按声明的顺序从左到右和从上到下放置“碰撞”小部件?它不会将小部件相对于彼此放置在同一单元格中。它们实际上堆叠在彼此的顶部,具有较高堆叠顺序的小部件可能会遮挡具有较低堆叠顺序的小部件。当根小部件(通常是框架或窗口)调整大小时,包含多个小部件的单元格的行为如何?单个单元格中可能有两个小部件这一事实根本不会影响调整大小的行为。所有小部件都根据网格管理器的正常规则进行调整。是否有一种机制可以在发生冲突时覆盖默认行为?不。如果您想控制单个网格单元中的多个小部件,您应该将这些小部件放在一个框架中,然后将该单个框架放在网格单元中。这使您可以完全控制该框架内相对于彼此的小部件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python