如何解决Treeview 偏离一列?
我一生都找不到任何帖子或文档来解释为什么 Treeview 标题与其余数据相差一列。
即使是我发现的 documentation 在示例中也显示了这个问题,但没有描述该问题。
import tkinter as tk
import tkinter.ttk as ttk
import random
n,m = 40,10
table = []
for i in range(n):
line = []
# line.append('')
# This adds a blank string to start of row data to off set the data.
# It is my current work around but does not look great.
for j in range(m):
line.append(random.randint(0,999))
table.append(line)
class Demo(tk.Tk):
def __init__(self):
super().__init__()
tree = ttk.Treeview(self)
tree.pack()
for i in range(n):
tree.insert('','end',text=table[i][0],values=table[i][1:])
tree['columns'] = list(range(m - 1))
headings = list('ABCDEFGHI')
for j in range(m - 1):
tree.column(j,width=50,anchor='e')
tree.heading(j,text=headings[j])
if __name__ == '__main__':
Demo().mainloop()
如您所见,标题偏离了一列。我不知道为什么会这样或如何正确修复它。
我确实管理了一个糟糕的解决方法,该方法将一个空字符串附加到行数据的开头,使其与正确的标题对齐,但这不是解决此问题的正确或最佳方法。
我在这里遗漏了什么吗?这对 Treeview 来说是正常的吗?
解决方法
据我所知,第一列具有特殊含义 - 它可用于显示带有嵌套元素的树 - 就像 tkdoc 中的图像一样 - 它可能需要特殊的方法来设置标题。
tree.heading('#0',text='Hello')
结果:
您也可以使用 "#1"
、"#2"
等来设置其他标题。
您可以在循环中使用 f'#{j}'
。
headings = list('ABCDEFGHIJ')
for j in range(m):
tree.column(f'#{j}',width=50,anchor='e')
tree.heading(f'#{j}',text=headings[j])
完整的工作代码:
import tkinter as tk
import tkinter.ttk as ttk
import random
n,m = 40,10
table = []
for i in range(n):
line = []
# line.append('')
# This adds a blank string to start of row data to off set the data.
# It is my current work around but does not look great.
for j in range(m):
line.append(random.randint(0,999))
table.append(line)
class Demo(tk.Tk):
def __init__(self):
super().__init__()
tree = ttk.Treeview(self)
tree.pack()
for i in range(n):
tree.insert('','end',text=table[i][0],values=table[i][1:])
tree['columns'] = list(range(m - 1))
headings = list('ABCDEFGHIJ')
for j in range(m):
tree.column(f'#{j}',anchor='e')
tree.heading(f'#{j}',text=headings[j])
#tree.heading('#0',text='Hello')
if __name__ == '__main__':
Demo().mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。