Tkinter:如何在响应单个事件的执行期间提供文本状态更新?
Tkinter: How can I provide text status updates during execution that is in response to a single event?
我有primary.py,一个Tkinter应用的主文件,有一个用户select一个文件,然后调用包含的各种函数在 other.py.
other.py中的功能需要一段时间运行,所以我想在每个功能完成后为用户提供更新。
我的问题是,在完成第 3 步之后,所有这些消息都会同时出现。我希望它们在每个步骤之后出现,因为我试图编写它。如何确保 'Step 1 in Progress' 出现在 dummy2
被调用之前,而不是出现在所有正在执行的函数的末尾?
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_display
方法更改为此来强制更新 GUI:
def tkinter_display(the_message):
ttk.Label(frame, text=the_message, style='my.TLabel').pack()
frame.update()
我有primary.py,一个Tkinter应用的主文件,有一个用户select一个文件,然后调用包含的各种函数在 other.py.
other.py中的功能需要一段时间运行,所以我想在每个功能完成后为用户提供更新。
我的问题是,在完成第 3 步之后,所有这些消息都会同时出现。我希望它们在每个步骤之后出现,因为我试图编写它。如何确保 'Step 1 in Progress' 出现在 dummy2
被调用之前,而不是出现在所有正在执行的函数的末尾?
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_display
方法更改为此来强制更新 GUI:
def tkinter_display(the_message):
ttk.Label(frame, text=the_message, style='my.TLabel').pack()
frame.update()