【问题标题】:Row selection in treeview树视图中的行选择
【发布时间】:2020-10-14 18:11:04
【问题描述】:

每次更新行时,下面的代码都会选择所有行。

child_id =treeview.get_children()
treeview.selection_set(child_id)

我不能只使用控件选择特定的行,并且每次只有选定的行再次被选中

示例代码:

from tkinter import ttk
import tkinter
import threading

def main():
    root = tkinter.Tk()
    
    ccols = ('num1','num2')
    treeview = ttk.Treeview(root, columns=ccols)
    for col in ccols:
        treeview.heading(col, text=col)
    treeview.grid(row=8, column=0)
    
    def sample():
       for i in range(50):
           treeview.delete(*treeview.get_children()) 
           a=(treeview.insert("","end",values=(i,0)))
           a=(treeview.insert("","end",values=(i,0)))
           a=(treeview.insert("","end",values=(i,0)))
           
           child_id =treeview.get_children()
           treeview.selection_set(child_id)
               
       threading.Timer(4.0, sample).start()

    sample()
    root.mainloop()


if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python tkinter treeview


    【解决方案1】:

    您可以保存所选行的当前索引。然后在更新树视图后,通过保存的索引获取行 ID,并使用行 ID 选择行:

    def sample():
        # save the indexes of selected rows
        indexes = [treeview.index(id) for id in treeview.selection()]
        # update treeview
        for i in range(50):
            treeview.delete(*treeview.get_children()) 
            treeview.insert("", "end", values=(i,0))
            treeview.insert("", "end", values=(i,0))
            treeview.insert("", "end", values=(i,0))
        # select the rows using the saved indexes
        for idx in indexes:
            child_id = treeview.get_children()[idx]
            treeview.selection_add(child_id)
                   
        threading.Timer(4.0, sample).start()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多