在ttk树视图中设置多个选定项目

时间:2018-09-06 14:32:45

标签: python python-2.7 tkinter ttk

使用Ttk Treeview控件时,尝试以编程方式设置多个选定项时出现TclError。

在Treeview控件中设置多个项目的正确方法是什么?

The documentation尚不清楚#include <stdio.h> #include "SDL2/SDL.h" int main(int argc, char const *argv[]) { if(SDL_Init(SDL_INIT_EVERYTHING) != 0) { SDL_Log(SDL_GetError()); return -1; } SDL_Window* wnd = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 300, 300, SDL_WINDOW_OPENGL); SDL_Renderer* renderer = SDL_CreateRenderer(wnd, 0, SDL_RENDERER_ACCELERATED); SDL_SetRenderDrawColor(renderer, 255, 255, 255 , 255); SDL_RenderClear(renderer); SDL_RenderPresent(renderer); SDL_Delay(6000); SDL_Quit(); return 0; } 允许使用什么类型:

  

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)

错误消息的最后一行看起来好像只是使用str将项目列表转换为字符串,但是格式不是后端期望的格式。

1 个答案:

答案 0 :(得分:1)

事实证明,items的{​​{1}}参数不能是列表。它必须是空格分隔的id列表或id的元组。

以下任何一种对我有用:

selection_set

或者:

tree.selection_set(tuple(all_items))

但是,如果使用带空格的字符串设置商品ID,则后一种方法将无效。

(另外,tree.selection_set(" ".join(all_items)) 返回一个元组,因此也可以删除原始代码中对列表的转换,并且可以进行。在我的完整代码中,我以一种更为复杂的方式生成了列表)。