Ошибка выбора нескольких элементов в Python Tkinter Treeview - PullRequest
0 голосов
/ 12 октября 2018

У меня есть приложение для поиска ttk.Treeview в моем приложении, которое устанавливает выбор (выделение) на основе поискового запроса.

Для этого я собираю элементы, которые хочу выбратьв строку, разделенную пробелами, например:

"item_a item_b item_c"

Я передаю эту строку в метод selection_set.

Проблема в том, что это не работает на некоторых компьютерах,хотя, насколько я могу судить, у них одинаковая версия python (2.7.10).

Я получаю сообщение об ошибке, например:

"item_a item_b item_c": Item not found

Как будто он искал один предмет с таким гигантским именем.

Я могу достичь той же цели, создав список и пройдя по нему, вызывая selection_add для каждого элемента, но он намного медленнее.

Я полагаю, что может быть разница в версии Tcl / Tk системы, которая может отличаться от версии Python, но я не уверен и не знаю, как проверить.

Но даже если бы это было так, у меня были ужасные проблемы с поиском хорошего документана любом из этого.Идея использования строки, разделенной пробелами, отсутствует даже в какой-либо документации, которую я нашел, я только что видел, как на нее ссылаются другие посты StackOverflow без источников.(Например, здесь )

Итак, я ищу независимое от версии (или, по крайней мере, способ определить версию и сделать что-то другое) решение для вызова selection_set со спискомпредметов.Если кто-нибудь скажет мне, как это сделать, или укажет на документацию, которая поможет мне понять, как это сделать, я буду признателен.

1 Ответ

0 голосов
/ 12 октября 2018

Причина, по которой строка, разделенная пробелами, работает, заключается в том, что tkinter - это просто тонкая оболочка вокруг интерпретатора tcl / tk, и tcl будет принимать строку, разделенную пробелом, в качестве списка.set_selection принимает список в качестве аргумента, поэтому, когда вы передаете ему строку, разделенную пробелом, tcl будет разбивать строку в соответствии со своими внутренними правилами.

Правильный способ вызова set_selection - передатьправильный список питонов, и tkinter преобразует его в список tcl для вас.

Вот короткий пример, который иллюстрирует выбор подмножества того, что находится в дереве, путем передачи списка с тремя элементами в set_selection:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

tree = ttk.Treeview(root)
tree.pack(fill="both", expand=True)

items = []
for i in range(10):
    item = tree.insert("", "end", text="Item {}".format(i+1))
    items.append(item)

items_to_select = items[2:5]
tree.selection_set(items_to_select)

root.mainloop()

Приведенный выше код приводит к окну, которое выглядиткак это:

enter image description here

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