python-3.x - python3 tkinter:我可以得到没有对齐列的参差不齐的网格吗?
问题描述
我正在用 python 编写一个 GUI,并使用 tkinter。我无法确定一种方法,需要指导。
背景:有一个服务器(不是网络服务器)想要向用户呈现大量信息,并让他们编辑其中的一些信息。它需要发送(相对)愚蠢的python客户端用来填充窗口的信息。只读字段是标签。这些字段通常是单行条目小部件,但有些是多行文本。有一些按钮、复选框和下拉菜单。异步地,服务器还可以更新小部件,添加和删除它们。在某些情况下,会显示一些表格,用户需要能够在其中添加和删除行。
真正的问题是,布局密集且混乱。第一行可能包含 3 个下拉字段。下一个可能是 20 个短标签。下一个可能是单个长输入字段,然后我可能需要并排的两个表(不同长度),然后等等。根据用户输入的外部因素,小部件、行或整个表可能必须是动态的添加或消失。
我考虑过网格,但它无法使用。一行有一个长条目widgit,使第一列变宽,从而将下一行中的13列中的12列推离窗口。
我考虑过 Place,但这个应用程序将在 3 种不同的操作系统上运行,用户将能够选择自己的字体,所以我永远不会得到正确的位置。如果有某种方法可以询问一个小部件它有多大,我会很乐意用它来计算我自己的像素布局,但显然不可能询问一个小部件的大小,直到它被几何管理器布置之后,这当然为时已晚。
所以我想我剩下的是Pack,其中每一行都是它自己的框架,其中一些行中有表格(网格)。但我担心这意味着要渲染大量的帧,并且一些用户使用的是旧的、缓慢的硬件。另外……它看起来很复杂。
我错过了更好的方法吗?如果我能说服它停止尝试让列对齐,网格会很好。地方会很脆,但是好的,如果我能提前得到每个小部件的大小。放置在很多框架内真的是我拥有的最好的吗?
解决方案
简短的回答,没有更好的方法;并且帧数不足以导致性能问题;所以每行生成一个帧是有效的。
推荐阅读
- discord.py - 运行“commands.group()”的 discord.py 在针对第二个命令时发送帮助命令
- python - 为什么选择 CharField 默认值也定义了 DateField 默认值
- api - 控制器的 ASP .NET Boilerplate Swagger XML 文档不可见
- sql-server - 将变量传递到 OpenQUERY SQL Server 2016
- flutter - Google Play 商店是否容忍华为 HMS?
- r - 创建用于迭代摘要的自定义函数
- python - 如何同时转换多个整数?
- python - Python - 使用可变数量的键/值制作字典
- c# - 如果焦点位于不是 AcceptButton 的按钮上,则 Enter 键不会关闭表单
- python - 无法使用邮递员访问烧瓶