【问题标题】:Treeview Display Size & Alignment树视图显示大小和对齐方式
【发布时间】: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 创建的行数,有时底部会在显示项目的最后一行之前被切断,有时在行的中间。如果我尝试为行高添加一个因子,它可能会为一个打开而对其他人关闭。
  • 注意:我会将不同长度的文本字符串加载到最长的列中,这就是为什么我需要找出一个公式,将树视图/框架的底部设置为内容区域的底部/项目区域/高度最大的列。

标签: python tkinter treeview


【解决方案1】:

我可以使用 textwrap.wrap 让文本自动换行。对于一项,这将导致来自单个字符串的 22 行文本。对于另一个项目,这可能会导致 21 行等。注意:由于文本字符串的长度,我在树视图中一次只显示一个项目。我可以使用一种样式设置字体,使其以 8 点显示。

我想不通的是如何在项目/列的底部截断树视图和/或框架的大小,以便在项目/列的底部和树视图/框架的底部,项目/列周围的边框是树视图/框架的底部边框。

如果我将 rowheight 设置为从 textwrap 创建的行数,有时底部会在显示项目的最后一行之前被切断,有时在行的中间。如果我尝试向行高添加一个因子,它可能会在一行中打开,而对于其他列高则关闭。

注意:我会将不同长度的文本字符串加载到最长的列中,这就是为什么我需要找出一个公式,将树视图/框架的底部设置为内容区域/项目区域/列的底部最大的高度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多