第一组代码有效。它显示更新变量。但是,在第二个代码中,当我将变量放在Treeview小部件中时,变量只保持为0并且不会更新。为什么这与标签有效但不与树视图一起使用?解决这个问题的最简单方法是什么?
首先(工作):
from tkinter import *
from tkinter import ttk
import threading
import time
def fun():
for i in range(10):
var.set(var.get() + 1)
time.sleep(.5)
t = threading.Thread(target=fun)
root = Tk()
var = IntVar()
var.set(0)
mainframe = ttk.Frame(root)
mainframe.grid(column = 0, row = 0)
label = ttk.Label(mainframe, textvariable=var)
label.grid(column = 0, row = 0)
t.start()
root.mainloop()
第二(不起作用):
from tkinter import *
from tkinter import ttk
import threading
import time
def fun():
for i in range(10):
var.set(var.get() + 1)
time.sleep(.5)
t = threading.Thread(target=fun)
root = Tk()
var = IntVar()
var.set(0)
mainframe = ttk.Frame(root)
mainframe.grid(column = 0, row = 0)
tree = ttk.Treeview(mainframe, columns = ('number'), height = 1)
tree.insert('', 'end', text = 'Number', values = var.get())
tree.grid(column=0, row=0)
t.start()
root.mainloop()
答案 0 :(得分:1)
将fun
修改为:
def fun():
for i in range(10):
var.set(var.get() + 1)
x = tree.get_children()
tree.item(x, text = 'Number', values = var.get())
time.sleep(.5)
get_children 方法返回元组项ID的列表,每个子树的一个子项。使用 tree.item ,然后使用所需的ID更新孩子。
在第二个程序中以及变量var
,您还必须更新树的子项