我在 python 中有一个使用 Tkinter 的 GUI,主 GUI 中有多个框架。添加了另一个框架以显示目录的树视图(也将具有子目录)并过滤以仅显示特定类型的文件。然后用户通过单击每个文件左侧显示的复选框来选择文件以进行进一步处理。我从这个样本开始。是否可以在每个条目的左侧使用带有复选框的 ttk 树视图,如 tix 中所示,如此处所示?
基本上希望在检查文件夹等时自动检查所有子项。就像 Windows 资源管理器对话框的工作方式一样。
有什么建议么?
这可以通过ttkwidgets模块中的CheckboxTreeview
小部件实现。文档可在此处获得。
CheckboxTreeview
继承自,因此您可以使用选项ttk.Treeview
创建文件大小列,就像在常规中一样。然后您可以使用ttk.Treeview
columns
tree.heading(<column>, text=<label>)
最后,如果您想更改复选框的样式,可以通过将它们替换为您自己的图像来实现。使用图像完成 3 个复选框状态:tree.im_checked
、tree.im_unchecked
、tree.im_tristate
。您可以将它们替换为
tree.im_checked.paste(<new PIL image>)
这是完整的代码:
from ttkwidgets import CheckboxTreeview
import tkinter as tk
from PIL import Image
root = tk.Tk()
tree = CheckboxTreeview(root, columns=['Size'])
tree.im_checked.paste(Image.open('path/to/image'))
tree.im_unchecked.paste(Image.open('path/to/image'))
tree.im_tristate.paste(Image.open('path/to/image'))
tree.pack()
tree.heading('#0', text='Directory structure', anchor='w')
tree.heading('#1', text='File size', anchor='w')
tree.insert("", "end", "1", text="1")
tree.insert("1", "end", "11", text="11")
tree.insert("1", "end", "12", text="12", values=['2 bytes'])
tree.insert("11", "end", "111", text="111", values=['100 bytes'])
tree.insert("", "end", "2", text="2", values=['20 bytes'])
root.mainloop()