Python Tkinter:如何在执行期间提供文本状态更新,以响应单个事件?

Python Tkinter:如何在执行期间提供文本状态更新,以响应单个事件?,python,tkinter,python-multiprocessing,Python,Tkinter,Python Multiprocessing,我有primary.py,这是Tkinter应用程序的主文件,让用户选择一个文件,然后调用other.py中包含的各种函数 other.py中的函数需要一段时间才能运行,因此我希望在每个函数完成后向用户提供更新 我的问题是,在完成步骤3之后,所有这些消息都会同时出现。我想让它们出现在每一步之后,就像我试图写它一样。如何确保在调用dummy2之前出现“正在进行的步骤1”,而不是在执行的所有函数结束时出现 from tkinter import * from tkinter.filedialog i

我有primary.py,这是Tkinter应用程序的主文件,让用户选择一个文件,然后调用other.py中包含的各种函数

other.py中的函数需要一段时间才能运行,因此我希望在每个函数完成后向用户提供更新

我的问题是,在完成步骤3之后,所有这些消息都会同时出现。我想让它们出现在每一步之后,就像我试图写它一样。如何确保在调用
dummy2
之前出现“正在进行的步骤1”,而不是在执行的所有函数结束时出现

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter import ttk
from multiprocessing import Process, Pipe
import other.py

class GUI:
    def __init__(self, master):
        self.master = master

def tkinter_display(the_message):
    ttk.Label(frame, text=the_message, style='my.TLabel').pack()

def select():

    path = askopenfilename()

    tkinter_display('The script is running...')

    if __name__ == '__main__':

        side1, side2 = Pipe()

        tkinter_functions_conn.send(path)

        p_import = Process(target=other.dummy, args=(side2,))
        p_import.start()

        tkinter_display('Step 1 in progress')
        tkinter_display(side1.recv())

        p_import2 = Process(target=other.dummy2, args=(side2,))
        p_import2.start()

        tkinter_display('Step 2 in progress')

        p_import3 = Process(target=other.dummy3, args=(side2,))
        p_import3.start()

        tkinter_display('Step 3 in progress')


if __name__ == '__main__':

    root = Tk() 
    my_gui = GUI(root)

    # Styles
    root.style = ttk.Style()
    root.style.configure('my.TButton')
    root.style.configure('my.TLabel')

    # Display
    frame = Frame()
    frame.pack()

    ttk.Button(frame, text="Select", command=select, style='my.TButton').pack()

    root.mainloop()

通过将
tkinter\u display
方法更改为以下方式,可以强制GUI更新:

def tkinter_display(the_message):
    ttk.Label(frame, text=the_message, style='my.TLabel').pack()
    frame.update()

通过将
tkinter\u display
方法更改为以下方式,可以强制GUI更新:

def tkinter_display(the_message):
    ttk.Label(frame, text=the_message, style='my.TLabel').pack()
    frame.update()

尝试将一些
root.update_idletasks()
调用放入
select
函数中。它可能会有帮助…带着同样的问题来到这里,update_idletasks()对我有效。尝试将一些
根目录下的update_idletasks()
调用放入
select
函数中。它可能会有帮助…带着同样的问题来到这里,update_idletasks()对我有用。