如何在 Python 中创建带有复选框的树视图
我一直在使用 Tkinter 和 Tix 编写一个小程序。 我现在需要一个带有复选框(复选框)的树视图,以便我可以从树视图中选择项目。 有没有简单的方法可以做到这一点? 我一直在研究 ttk.Treeview() ,看起来很容易获得树视图,但是有没有办法在视图中插入复选按钮?
一个简单的代码片段将非常感激。
我不限于ttk。任何事都可以;只要我有一个例子或好的文档我就能让它工作
I've been using Tkinter and Tix to write a small program.
I'm at a point where I need a tree view with checkboxes (checkbuttons) so I can select items from the tree view.
Is there an easy way to do this?
I've been looking at ttk.Treeview () and it looks easy to get the tree view but is there a way to insert a checkbutton to the view?
A simple code snippet would be really appreciated.
I'm not limited to ttk. Anything will do; as long as I have an example or good docs I can make it work
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我制作了一个带有继承 ttk.Treeview 的复选框的 Treeview 类,但复选框不是 ttk.Checkbutton 而是选中、未选中和三态复选框的图像。
ttkwidgets 模块中提供了
CheckboxTreeview
的改进版本。I made a treeview class with checkboxes inheriting ttk.Treeview, but the checkboxes are not ttk.Checkbutton but images of checked, unchecked and tristate checkboxes.
An improved version of
CheckboxTreeview
is available in the ttkwidgets module.如果您可以使用
Tix
,请使用@Brandon 的解决方案。如果您被Ttk
困住了(就像我一样),这里有一个基于 @j_4231 想法的解决方案。我们可以使用 Unicode 提供的两个字符,而不是使用图像来表示复选框:☐
这些字符位于项目名称之后,用于检查当前状态:
treeview.item(iid, "text")[-1]
是☐
或 <代码>☒。我们可以在单击文本时更新项目名称。TtkCheckList
类继承了ttk.Treeview
,因此可以使用Treeview
常用的参数/方法。下面是一个示例:
您可以使用
clicked
参数来定义项目被点击时的新行为。点击。例如:
以及:
If you can use
Tix
, go with @Brandon's solution. If you are stuck withTtk
(as I am), here is an solution based on @j_4231's idea. Rather than using an image to represent the checkbox, we can use two characters provided by Unicode:☐
☒
.Those character are located after the item name and are used to check the current state:
treeview.item(iid, "text")[-1]
is either☐
or☒
. We can update the item name when the text is clicked.The class
TtkCheckList
inheritsttk.Treeview
, hence the usual parameters/methods ofTreeview
can be used.Here is an example:
You can use the
clicked
parameter to define a new behavior when an item isclicked. For instance:
And:
我想补充一下 jferard 的精彩答案,如果您想要一个值表而不是树结构,请更改以下内容:
在 init 中添加:
对于您想要的每一列。
add_item 应该是:
将示例更改为:
I would add to jferard's great answer that if you want to have a table of values rather than a tree structure change the following:
In the init add:
for each column you want.
add_item should be:
Change the example as such: