python - 将小部件的引用传递给函数

标签 python tkinter

在下面的 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 按钮,我可以在函数完成和插入延迟后一次性看到所有值(按顺序分配)。

请帮我按照执行的指令逐一更新文本条目。

最佳答案

你应该使用 after在 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()

想法是 loadStatusafter“递归”调用。现在它永远有效,但您可以添加一些计数器等,以检查递归调用何时应该停止。希望这会有所帮助。

关于python - 将小部件的引用传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30234307/

相关文章:

python - 用其他系列的最小值替换数据框中的 np.nan

python - NVlabs对StyleGAN的实现显示语法错误

python - 图像中的第 4 个 channel 是什么?

python - Tkinter 按钮打开另一个我不想要的窗口

python - 循环之神再次来袭——如何在 GUI mainloop 的情况下保持套接字连接?

python - AWS Elasticsearch 服务角色权限

python - 如何在 docker-py 中运行基本的 Web 应用程序容器?

python - 如何将子进程文本输出发送到 Tkinter 文本小部件?

python - 如何从重叠的形状中获取输出? Python 3.5 Tkinter

python - 无法使用 Python 工具在 Visual Studio 中启动 Tkinter 窗口