子窗口中的窗口小部件使用tkinter python中的实时数据更新

时间:2018-09-21 05:37:41

标签: python python-2.7 tkinter treeview ttk

我尝试使用after / time.sleep更新树视图,但是它不适用于mainloop。

我的问题是:

  • 如何使用实时数据更新treeview小部件?
  • 有没有一种方法可以同时更改所有Treeview子级? (我不想删除所有子项,然后再次插入)

脚本1:

class Page_one(tk.Frame):
    def __init__(self, parent, controller):
        mainframe=tk.Frame.__init__(self, parent)
        self.controller = controller

        #treeview widget attached to page_one
        tree1=Treeviews(...)
        tree1.place(x=880,y=25)

#Question1: How can I update the treeview widget with real-time data? 
#Question2: is there a way that I can change all treeview children simuteniously? (I dont want to delete all children and insert again)

脚本2:

bootstrap column

我的问题是:可能有人向我展示了一个可用于更新第二个脚本中的小部件的结构。

1 个答案:

答案 0 :(得分:0)

您可以使用public void set_bedehkariha_list() { new DownloadTask().execute(); } 方法修改树形视图小部件:

item

在创建商品时会返回该商品的ID。您可以通过将上面的代码放入for循环中来更改所有treeview子级:

tree.item(<item id>, text='new text', values=(...))

for item in tree.get_children(<parent>): tree.item(item, text='new text', values=(...)) 返回项目的子项(“表示树的根”。

根据您的问题,我了解到您有一些单独的过程来生成数据,并且您想用生成的新数据定期更新树视图内容。使用tree.get_children(<parent>)将冻结主循环,因此您应使用time.sleep tkinter方法:after将等待给定时间,然后执行tree.after(<time in ms>, callback, *args)。如果您想定期进行回调,诀窍是在callback(*args)内再次调用after,例如:

callback

因此,一旦启动def callback(x, y): # do something with x and y ... tree.after(2000, callback, x, y) ,它将每2秒执行一次。

这是一个带有树视图的示例:

callback(0, 2)