在tkin中如何定位网格布局的小部件

2024-10-01 17:32:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难用tkinter理解Python网格布局。这是一个布局,我试图了解如何创建。在

Layout

据我所知,我将创建8帧。顶部框架将包括前3个框架,其中行数为0,列跨度为3。底部框架将包括底部的3个框架,其行数为1,柱距为3。我不明白sticky属性是如何起作用的。另一件我不明白的是grid_rowconfigure/columnconfigure中的权重。从我看来,它应该以不同的速率增长每一帧?与较小的数字相比,权重越高,其值越小(即权重为1,另一帧上的权重为3意味着3将以1的大小的1/3增长)。ctrleft frame上的小部件似乎可以通过使用pack创建一条直线并更改填充来设置它们。我错了吗?提前感谢所有花时间帮忙的人。在


Tags: 框架网格属性tkinter速率数字布局frame
1条回答
网友
1楼 · 发布于 2024-10-01 17:32:41

有很多方法可以完成你的任务。重要的是不要试图同时解决所有布局问题。你需要采取“分而治之”的方法。将UI分成逻辑组,排列组,然后将每个组分成更小的组并对其进行排列,依此类推。在

例如,我可以这样安排:

我将首先创建六个函数(或者六个类,如果您愿意的话),每个主要部分一个。当gui的主要部分是这样的时候:

class Example(object):
    def __init__(self):
        root = tk.Tk()
        topleft = self.create_topleft()
        topmid = self.create_topmid()
        ...

逻辑安排似乎是一个2x3网格。假设您希望在调整窗口大小时每个部分都能相等地展开,我可以给所有行和所有列赋予相同的权重,以便在行和列之间平均分配额外的空间:

^{pr2}$

最后,我将在网格中布置小部件:

class Example(object):
    def __init__(self):
        ...
        topleft.grid(row=0, column=0, sticky="nsew")
        topmid.grid(row=0, column=1, sticky="nsew")
        ...

这样,用户界面的总体结构就设置好了。您甚至可以在不添加任何其他小部件的情况下测试调整大小的行为。给每个部分一个不同的颜色和一个临时大小,然后通过调整窗口大小来试验每个部分如何响应。在

现在,您可以独立地开发每个部分,而不必担心它们如何影响GUI的其余部分。例如,某些部分中的小部件可以使用pack,有些可以使用grid,如果这最有意义的话,您甚至可以使用place。在

例如,ctrmid似乎非常适合pack,因为上面有一个大部件,底部有一个小部件。在

ctrleft本身看起来像是两个标签加上一个内部框架。这些可以用pack排列,但是内部框架内的小部件可以使用grid来形成表。在

^{bq}$

你倒过来了。权重描述如何分配额外的空间,权重是成比例的。权重为2意味着行或列将获得两倍于权重为1的列的额外空间。在

相关问题 更多 >

    热门问题