Eri*_*mas 7 python user-interface tkinter python-3.x
单击操作按钮后,我有一个程序运行一个很长的过程.当进程正在运行时,根窗口会说它没有响应,即使我知道程序在后台运行.这个程序将发布给我工作的一些人,我想确保他们看到这个时不会惊慌失措并关闭窗口.我的解决方案是将root.update放在正在运行的进程的循环中,但我不确定这是最好的修复.
使用python 3.3
下面是代码示例,以便您了解我正在做什么,这是从主循环中调用的:
def combine(boxes_to, boxes_from, frame):
to_value,to_pos = gui.checkBoxes(boxes_to)
from_value,from_pos = gui.checkBoxes(boxes_from)
frame.destroy()
running = Label(root,text="Running please do not close..",font = (16))
running.pack()
root.update()
map_to = open("map_to",'r')
for line in map_to:
root.update()
process(line)
running.destroy()
map_to.close()
finish = Button(root, text="Done",command=gui.stop)
finish.pack()
Run Code Online (Sandbox Code Playgroud)
小智 15
这里你能做的最好的事情就是在 Python 中使用多线程。执行此操作的方法如下:
假设您有一个名为“btn”的函数combine(),该函数导致窗口冻结,该函数被用作名为“btn”的按钮的命令,如下所示:
btn = Button(root, text="Click Me", command=combine)
Run Code Online (Sandbox Code Playgroud)
现在,当btn按下时,您可能会遇到“无响应”问题。要解决此问题,请编辑代码,如下所示:
btn = Button(root, text="Click Me", command=combine)
Run Code Online (Sandbox Code Playgroud)
这里threading.Thread创建了一个单独的线程来combine()执行该方法,因此 GUI 可以在执行命令时继续保持响应。
| 归档时间: |
|
| 查看次数: |
9557 次 |
| 最近记录: |