python ttk treeview: как выбрать и установить фокус на строке? - PullRequest
3 голосов
/ 23 октября 2011

У меня есть виджет ttk.Treeview с некоторыми строками данных.Как установить фокус на и выбрать (выделить) указанный элемент?

tree.focus_set()

ничего не делает

tree.selection_set(0)

жалуется, что: элемент 0 не найден, хотя виджет заполненс более чем нулевым товаром.Попытка элемента 1. не лучше.

РЕДАКТИРОВАТЬ: чтобы выбрать элемент, найдите его идентификатор, а затем используйте tree.selection_set (id).Кажется, что ни tree.focus (id), ни tree.focus_set (id) ничего не делают.

Ответы [ 5 ]

1 голос
/ 05 ноября 2018

Получить идентификатор элемента дерева, который вы хотите выделить / выбрать

child_id = tree.get_children()[-1] # for instance the last element in tuple

Чтобы выделить элемент, используйте focus() и selection_set(item_id)

tree.focus(child_id)
tree.selection_set(child_id)
1 голос
/ 28 апреля 2016

Встречайте этот вопрос, когда я пытаюсь решить точно такую ​​же проблему.

Обнаружил это:

tree.selection_set(item) выделяет элемент

tree.focus(item) или tree.focus_set(item) выбирает элемент

1 голос
/ 23 октября 2011

Примечание: я не работал с python.

Глядя на эту ссылку, метод focus с необязательным параметром item должен выделить узел.

Если нет, посмотрите на параметр selectmode и установите его на "browse".

0 голосов
/ 19 апреля 2019
def mycallback(event):
    _iid = treeview.identify_row(event.y)
    global  last_focus
    if _iid != last_focus:
        if last_focus:
            treeview.item(last_focus, tags=[])
        treeview.item(_iid, tags=['focus'])
        last_focus = _iid

treeview.tag_configure('focus', background='red')
global last_focus
last_focus = None
treeview.bind("<Motion>", mycallback)
0 голосов
/ 30 декабря 2017

Использовать tree.selection_add (item_iid)

Причина, по которой tree.selection_set (0) не работает, заключается в том, что 0 - это не iid элемента, это индекс, на который вы ссылаетесь, а Treeview ожидаетiid.

...