在ttk Treeview中设置多个选择项
Set multiple selected items in ttk Treeview
使用 Ttk Treeview 控件时,我在尝试以编程方式设置多个选定项时收到 TclError。
在 Treeview 控件中将多个项目设置为选中的正确方法是什么?
The documentation 不清楚 items
:
允许的类型
selection_set(items)
items becomes the new selection.
我已将我的代码简化为以下内容:
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 将项目列表转换为字符串,但格式不是后端所期望的格式。
原来selection_set
的items
参数不能是列表。它必须是 space 分隔的 iid 列表或 iid 元组。
以下任一项对我有用:
tree.selection_set(tuple(all_items))
或:
tree.selection_set(" ".join(all_items))
但是,如果使用带有 space 的字符串设置项目 ID,则后一种方法将不起作用。
(此外,tree.get_children()
returns 一个元组,因此也可以删除原始代码中列表的转换,这样就可以了。在我的完整代码中,我生成了列表不过,这是一种更复杂的方法。
使用 Ttk Treeview 控件时,我在尝试以编程方式设置多个选定项时收到 TclError。
在 Treeview 控件中将多个项目设置为选中的正确方法是什么?
The documentation 不清楚 items
:
selection_set(items)
items becomes the new selection.
我已将我的代码简化为以下内容:
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 将项目列表转换为字符串,但格式不是后端所期望的格式。
原来selection_set
的items
参数不能是列表。它必须是 space 分隔的 iid 列表或 iid 元组。
以下任一项对我有用:
tree.selection_set(tuple(all_items))
或:
tree.selection_set(" ".join(all_items))
但是,如果使用带有 space 的字符串设置项目 ID,则后一种方法将不起作用。
(此外,tree.get_children()
returns 一个元组,因此也可以删除原始代码中列表的转换,这样就可以了。在我的完整代码中,我生成了列表不过,这是一种更复杂的方法。