【发布时间】:2021-08-23 02:22:22
【问题描述】:
我有一个 python tkinter 树视图,它的标题字体大小为 12,行字体大小为 8。我在树视图中有一个项目。在该项目的其中一列(比如说第 3 列)中,我有一个文本字符串明显长于该列的宽度。如果我使用自动换行功能在 90 个字符后扭曲文本字符串,则文本字符串会在项目的列中创建 22 行文本 - 全部为 8 号字体。
如何使用样式、高度和行高来设置树视图小部件,以便列中的全文显示在树视图中,并且树视图的底部与项目的第 3 列的底部对齐 - 这样项目底部和树视图底部之间没有空格?我尝试使用带有我的字体的度量来计算行空间,然后将行高设置为行空间。但似乎没有任何效果。
header_font = tkfont.Font(family='TimesNewRoman', size=12)
row_font = tkfont.Font(family='TkFixedFont', size=8)
row_font.metrics()['linespace']
style = ttk.Style()
treeview.height=1
style.configure("Treeview.Heading", font=header_font, rowheight=int(12*2.5))
style.configure("Treeview", font=row_font, rowheight=(row_font.metrics()['linespace']*2.5))
注意:树视图在使用包的框架中。
【问题讨论】:
-
您可以尝试将文本写入 2 行,以便使用 \n 字符使其适合。如果是一个词就不行了
-
我会预处理您要显示的文本。如果任何文本的长度超过了合理的字符数量(例如 >50),那么您可以裁剪它并添加省略号,或者通过在方便的位置插入
\n将其拆分为两行。这比弄乱树视图的显示选项要容易得多。 -
我可以使用 textwrap.wrap 让文本自动换行。对于一项,这将导致来自单个字符串的 22 行文本。对于另一个项目,这可能会导致 21 行等。注意:由于文本字符串的长度,我在树视图中一次只显示一个项目。我可以使用一种样式设置字体,使其以 8 点显示。
-
我想不通的是如何在项目/列的底部截断树视图和/或框架的大小,以便在底部之间没有空格项目/列和树视图/框架的底部,项目/列周围的边框是树视图/框架的底部边框。如果我将 rowheight 设置为从 textwrap 创建的行数,有时底部会在显示项目的最后一行之前被切断,有时在行的中间。如果我尝试为行高添加一个因子,它可能会为一个打开而对其他人关闭。
-
注意:我会将不同长度的文本字符串加载到最长的列中,这就是为什么我需要找出一个公式,将树视图/框架的底部设置为内容区域的底部/项目区域/高度最大的列。