首页 > 解决方案 > python3 tkinter:我可以得到没有对齐列的参差不齐的网格吗?

问题描述

我正在用 python 编写一个 GUI,并使用 tkinter。我无法确定一种方法,需要指导。

背景:有一个服务器(不是网络服务器)想要向用户呈现大量信息,并让他们编辑其中的一些信息。它需要发送(相对)愚蠢的python客户端用来填充窗口的信息。只读字段是标签。这些字段通常是单行条目小部件,但有些是多行文本。有一些按钮、复选框和下拉菜单。异步地,服务器还可以更新小部件,添加和删除它们。在某些情况下,会显示一些表格,用户需要能够在其中添加和删除行。

真正的问题是,布局密集且混乱。第一行可能包含 3 个下拉字段。下一个可能是 20 个短标签。下一个可能是单个长输入字段,然后我可能需要并排的两个表(不同长度),然后等等。根据用户输入的外部因素,小部件、行或整个表可能必须是动态的添加或消失。

我考虑过网格,但它无法使用。一行有一个长条目widgit,使第一列变宽,从而将下一行中的13列中的12列推离窗口。

我考虑过 Place,但这个应用程序将在 3 种不同的操作系统上运行,用户将能够选择自己的字体,所以我永远不会得到正确的位置。如果有某种方法可以询问一个小部件它有多大,我会很乐意用它来计算我自己的像素布局,但显然不可能询问一个小部件的大小,直到它被几何管理器布置之后,这当然为时已晚。

所以我想我剩下的是Pack,其中每一行都是它自己的框架,其中一些行中有表格(网格)。但我担心这意味着要渲染大量的帧,并且一些用户使用的是旧的、缓慢的硬件。另外……它看起来很复杂。

我错过了更好的方法吗?如果我能说服它停止尝试让列对齐,网格会很好。地方会很脆,但是好的,如果我能提前得到每个小部件的大小。放置在很多框架内真的是我拥有的最好的吗?

标签: python-3.xtkintergeometry

解决方案


简短的回答,没有更好的方法;并且帧数不足以导致性能问题;所以每行生成一个帧是有效的。


推荐阅读