这是基本想法。
在阅读python文档中的所有内容时,我无法理解它们。理解它太过分了。
有人可以解释一下如何使用多线程(或多进程)客户端获得工作进度条吗?
还是有其他方式来更新"进度条没有锁定程序的GUI?
我也读了一些关于" I / O"当这些类型的客户端同时尝试访问文件时出现错误。当应用程序没有正确调用多线程库时,X服务器错误。 如何避免'
这次我没有编写代码,我不想以僵尸程序或类似的东西结束(然后迫使PC关闭,我不想破坏宝贵的数据...... )。我需要先了解我在做什么!
答案 0 :(得分:2)
下面的内容可能会让你开始? - 我试图尽可能地注释来解释这个过程。
from Tkinter import *
from Queue import Queue
import ttk, threading
import time
queue = Queue()
root = Tk()
# Function to do 'stuff' and place object in queue for later #
def foo():
# sleep to demonstrate thread doing work #
time.sleep(5)
obj = [x for x in range(0,10)]
queue.put(obj)
# Create thread object, targeting function to do 'stuff' #
thread1 = threading.Thread(target=foo, args=())
# Function to check state of thread1 and to update progressbar #
def progress(thread, queue):
# starts thread #
thread.start()
# defines indeterminate progress bar (used while thread is alive) #
pb1 = ttk.Progressbar(root, orient='horizontal', mode='indeterminate')
# defines determinate progress bar (used when thread is dead) #
pb2 = ttk.Progressbar(root, orient='horizontal', mode='determinate')
pb2['value'] = 100
# places and starts progress bar #
pb1.pack()
pb1.start()
# checks whether thread is alive #
while thread.is_alive():
root.update()
pass
# once thread is no longer active, remove pb1 and place the '100%' progress bar #
pb1.destroy()
pb2.pack()
# retrieves object from queue #
work = queue.get()
return work
work = progress(thread1, queue)
root.mainloop()
希望这会有所帮助。让我知道你的想法!