tkinter.TreeView
有第一个默认列(标识符#0
)。例如,这是为了持有' +'唱树。
当我添加其他列时,第一列会调整大小并且大到很宽。
这是生成此树视图的代码。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from tkinter import *
from tkinter import ttk
root = Tk()
tree = ttk.Treeview(root, columns=('one'))
idx = tree.insert(parent='', index=END, values=('AAA'))
tree.insert(parent=idx, index=END, values=('child'))
tree.column('#0', stretch=False) # NO effect!
tree.pack()
root.mainloop()
我希望第一列(#0
)的最小固定宽度取决于其中的+号。关键是由于不同的桌面环境和用户设置,该列的宽度因系统而异。因此,当我在这里设置固定大小的像素时,它会打破Python3和Tkinter的平台独立性。
答案 0 :(得分:1)
在窗口上,展开/折叠按钮似乎是根据大小动态绘制的,根据this minwidth
选项默认为20.我会编写一个方法来计算{{1}这样它可以解释深度和图像以及文字宽度+20。
话虽如此,使用this answer可以编写一个方法来修复minwidth
Tk默认值的列宽,方法是在那个确切的位置打破tagbind:
minwidth
一个完整的例子:
#the minimum width default that Tk assigns
minwidth = tree.column('#0', option='minwidth')
tree.column('#0', width=minwidth)
#disabling resizing for '#0' column particularly
def handle_click(event):
if tree.identify_region(event.x, event.y) == "separator":
if tree.identify_column(event.x) == '#0':
return "break"
#to have drag drop to have no effect
tree.bind('<Button-1>', handle_click)
#further disabling the double edged arrow display
tree.bind('<Motion>', handle_click)