我在Python脚本中使用ttkwidgets模块中的checkboxtreeview小部件。通过将状态设置为“选中”、“未选中”或“三态”,我可以使项目的复选框按预期显示。
有没有办法禁用复选框,即用户不能再通过单击它来更改状态?
非常感谢您的帮助!
发布于 2020-01-09 00:47:24
您可以添加一个" disabled“标记,并在用户单击树时调用的_box_click()函数中签入该项目在更改其状态之前未被禁用。在下面的代码中,我复制了_box_click()方法的源代码并添加了
if self.tag_has("disabled", item):
return # do nothing when disabled以禁用状态更改。我还配置了" disabled“标记,以便字体更亮,以便能够看到禁用的项目:self.tag_configure("disabled", foreground='grey')
下面是完整的代码和示例:
import ttkwidgets as tw
import tkinter as tk
class CheckboxTreeview(tw.CheckboxTreeview):
def __init__(self, master=None, **kw):
tw.CheckboxTreeview.__init__(self, master, **kw)
# disabled tag to mar disabled items
self.tag_configure("disabled", foreground='grey')
def _box_click(self, event):
"""Check or uncheck box when clicked."""
x, y, widget = event.x, event.y, event.widget
elem = widget.identify("element", x, y)
if "image" in elem:
# a box was clicked
item = self.identify_row(y)
if self.tag_has("disabled", item):
return # do nothing when disabled
if self.tag_has("unchecked", item) or self.tag_has("tristate", item):
self._check_ancestor(item)
self._check_descendant(item)
elif self.tag_has("checked"):
self._uncheck_descendant(item)
self._uncheck_ancestor(item)
root = tk.Tk()
tree = CheckboxTreeview(root)
tree.pack()
tree.insert("", "end", "1", text="1")
tree.insert("1", "end", "11", text="11", tags=['disabled'])
tree.insert("1", "end", "12", text="12")
tree.insert("11", "end", "111", text="111")
tree.insert("", "end", "2", text="2")
root.mainloop()https://stackoverflow.com/questions/56004616
复制相似问题