Python 传递小部件';函数的引用

Python 传递小部件';函数的引用,python,tkinter,Python,Tkinter,在下面的Python应用程序中,我的主要基于Tkinter的GUI窗口有一些按钮(它们依次调用一些函数)和文本小部件。文本小部件将通过按按钮调用的函数进行更新 我尝试将文本发送到函数,但无法按顺序查看文本中的更新值。而是首先完成函数(或循环),然后在最后一起更新所有值。我想在执行相应的指令时逐一查看它们 from Tkinter import * import Tkinter as tk from functools import partial import time class mainW

在下面的Python应用程序中,我的主要基于
Tkinter
的GUI窗口有一些按钮(它们依次调用一些函数)和文本小部件。文本小部件将通过按按钮调用的函数进行更新

我尝试将文本发送到函数,但无法按顺序查看文本中的更新值。而是首先完成函数(或循环),然后在最后一起更新所有值。我想在执行相应的指令时逐一查看它们

from Tkinter import *
import Tkinter as tk
from functools import partial
import time

class mainWindow:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)

        self.stat0 = tk.Text(self.frame,bg='cyan', font=("Helvetica", 10), width = 8, height = 1)
        self.stat0.grid(row=2, column=0, sticky=W)    
        self.b0 = tk.Button(self.frame,bg='black',fg='white',text='LOAD',font=("Helvetica", 8),command=lambda:self.loadStatus(self.stat0))
        self.b0.grid(row = 1, column = 0, sticky=W)

        self.frame.grid()


    def loadStatus(self,stat):
        stat.insert(END,5)
        time.sleep(1)
    #   stat.delete(1.0,END)
        stat.insert(END,"hi")
    #   stat.delete(1.0,END)
        time.sleep(1)
        stat.insert(END,0)

if __name__ == '__main__':
    #main()
    root = tk.Tk()
    app = mainWindow(root)
    root.mainloop()
在这里,按下
load
按钮,我可以在功能完成和插入延迟后一次性看到所有值(按顺序分配)

请帮助我根据执行的指令逐个更新文本条目。

您应该使用在tkinter中执行一些时间触发事件。我更改了您的代码以使用它:

from Tkinter import *
import Tkinter as tk
from functools import partial

class mainWindow:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)

        self.stat0 = tk.Text(self.frame,bg='cyan',
                             font=("Helvetica", 10), width = 8, height = 1)
        self.stat0.grid(row=2, column=0, sticky=W)
        self.b0 = tk.Button(self.frame,bg='black',fg='white',text='LOAD',
                            font=("Helvetica", 8),command=self.loadStatus)
        self.b0.grid(row = 1, column = 0, sticky=W)

        self.frame.grid()


    def loadStatus(self):

        self.stat0.insert(END, "hi")
        self.frame.after(1000, self.loadStatus)



if __name__ == '__main__':
    #main()
    root = tk.Tk()
    app = mainWindow(root)
    root.mainloop()

其思想是,
loadStatus
之后“递归地”调用。现在它永远工作,但您可以添加一些计数器等,以检查递归调用何时停止。希望这有帮助。

这不是我想要的。以上只是一个伪代码。我的应用程序实际上想要读取函数内循环中变量的值&更新其文本小部件。所有这些都应该发生在单个函数调用中的不同循环迭代中。因此,根据我的代码:
def loadStatus(self,stat):stat.insert(END,5)time。sleep(1)stat.insert(END,“hi”)time。sleep(1)stat.insert(END,0)
我想看到这些值在按下按钮时改变并稳定在0。在您的更改中,按一次按钮将不断地调用func,这是不需要的。