【问题标题】:Stop tkinter treeivew from deselecting?停止 tkinter 树视图取消选择?
【发布时间】:2022-01-03 01:19:26
【问题描述】:

我有一个树形视图,我不希望它如此轻易地取消选择项目。当我尝试展开父节点时,我主要不希望它取消选择所有内容。

有什么方法可以让我使用按钮管理树视图取消选择,而不是将其全部留给小部件?

【问题讨论】:

  • 是的,有办法实现这一目标
  • 详细说明会很好

标签: python tkinter treeview ttk


【解决方案1】:

其中一种方法是:

  • 设置selectmode='none' 禁用鼠标左键选择
  • 将鼠标右键单击绑定到回调,并选择回调内点击的项目。
import tkinter as tk
from tkinter import ttk

root = tk.Tk()

tree = ttk.Treeview(root, selectmode='none')
tree.pack()

# insert dummy data
for i in range(5):
    node = tree.insert('', 'end', text=f'Node {i+1}')
    for j in range(3):
        tree.insert(node, 'end', text=f'Sub-note {i+1}.{j+1}')

def on_right_clicked(event):
    row = tree.identify('row', event.x, event.y)
    if row:
        # select clicked item
        tree.selection_set(row)

tree.bind('<3>', on_right_clicked)

root.mainloop()

然后展开父节点不会选择该节点。


更新:如果需要多选,请将tree.selection_set(...) 替换为tree.selection_toggle(...)

【讨论】:

  • 这确实解决了父扩展问题,但它消除了选择多个项目的能力,这对我正在制作的程序来说是必不可少的。
  • @SlaveCat 您可以使用selection_toggle(row) 而不是selection_set(row) 进行多项选择。
  • @SlavaCat 请注意,accepting an answer 是此处交易的一部分。
猜你喜欢
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多