Я хочу выбрать несколько строк из виджета ttk.Treeview. Минимальный код, который следует за этим, создает это окно:
Простой щелчок в окне приводит к правильным результатам. Результирующее выделение дерева печатается при вызове treeview_callback
.
Однако нажатие <Cmd>
, которое должно привести к расширенному выделению, не работает , но только при первом отображении виджета . Функция обратного вызова не вызывается виртуальным событием <<TreeviewSelect>>
. Нажатие <Cmd>
может быть выполнено с помощью предварительного выбора мыши без клавиши <Cmd>
.
Ошибка не является последовательной. Это происходит, когда древовидная структура отображается впервые. После нескольких нажатий <Cmd>
одного цвета они начинают регистрироваться. Количество кликов варьируется, но всегда было меньше двадцати. Я не смог обнаружить какой-либо шаблон, который мог бы объяснить, когда он начинает работать. Как только он начал работать правильно, никакого возврата в режим отказа не было замечено.
"""Treeview selection error demo."""
import tkinter as tk
import tkinter.ttk as ttk
def treeview_callback(tree: ttk.Treeview):
def print_color_selection(*args):
print(f"{tree.selection()=}")
return print_color_selection
gui = tk.Tk()
tree = ttk.Treeview(gui, columns=('colors',), height=6, selectmode='extended',
show='tree')
tree.grid(column=0, row=0)
tree.tag_bind('colors', '<<TreeviewSelect>>', callback=treeview_callback(tree))
for color in ['blue', 'white', 'red', 'green', 'goldenrod']:
tree.insert('', 'end', color, text=color, tags='colors')
tree.selection_add('white', 'red', 'green')
gui.mainloop()