Установить несколько выбранных элементов в ttk Treeview - PullRequest
0 голосов
/ 06 сентября 2018

При использовании элемента управления Ttk Treeview я получаю TclError при попытке программно установить несколько выбранных элементов.

Как правильно установить несколько элементов, выбранных в элементе управления Treeview?

В документации не ясно, какие типы разрешены для items:

selection_set(items) пунктов становится новым выбором.

Я упростил свой код до следующего:

try:  # python 2
    import Tkinter as tk
    import ttk
except ImportError:  # python 3
    import tkinter as tk
    from tkinter import ttk

root = tk.Tk()
tree = ttk.Treeview(root)
for text in ['apple', 'banana', 'coconut']:
    tree.insert('', 'end', text=text)
all_items = list(tree.get_children())

print("all_items = {!r}".format(all_items))
tree.selection_set(all_items)

Однако возникает исключение:

all_items = ['I001', 'I002', 'I003']
Traceback (most recent call last):
  File ...
    tree.selection_set(all_items)
  File "C:\Python27\lib\lib-tk\ttk.py", line 1402, in selection_set
    self.selection("set", items)
  File "C:\Python27\lib\lib-tk\ttk.py", line 1397, in selection
    return self.tk.call(self._w, "selection", selop, items)
_tkinter.TclError: Item ['I001', not found

В последней строке сообщения об ошибке создается впечатление, что он преобразует список элементов в строку, используя только str, но формат не соответствует ожидаемому бэкэндом.

1 Ответ

0 голосов
/ 06 сентября 2018

Оказывается, что аргумент items для selection_set не может быть списком. Это должен быть либо разделенный пробелами список iids, либо кортеж iids.

У меня сработало одно из следующих действий:

tree.selection_set(tuple(all_items))

Или:

tree.selection_set(" ".join(all_items))

Последний метод не будет работать, если идентификаторы элементов были заданы с использованием строк с пробелами.

(Кроме того, tree.get_children() возвращает кортеж, поэтому преобразование в список в исходном коде также может быть удалено, и оно будет работать. Однако в своем полном коде я генерировал список более сложным способом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...