1
我已經得到了我寫在Python 3 我有包含在其中創建我的所有小工具類一個模塊一個Tkinter的應用。我正在嘗試從一個單獨的模塊更新進度條,它可以完成繁重的工作。Tkinter的:更新部件來自不同模塊
#GUI.py
import tkinter as tk
from tkinter.filedialog import askopenfilename, askdirectory
import tkinter.ttk as ttk
import Work_Module
progress_bar = None
class Application(tk.Frame):
def __init__(self, master=None):
master.title('CCD Creator Version 1.0')
tk.Frame.__init__(self, master, width=500)
self.pack()
self.create_widgets()
def create_widgets(self):
global progress_bar
progress_bar = tk.ttk.Progressbar(orient=tk.HORIZONTAL, length=200, mode='determinate')
progress_bar.pack(side="bottom")
self.run = tk.Button(self, text=" Run ", fg="green", command=self.do_work)
self.run.pack(side="top")
#Continue creating various widgets that don't need to be updated by other modules
def do_work(self):
Work_Module.main()
def main():
root = tk.Tk()
app = Application(master=root)
app.mainloop()
if __name__ == '__main__':
main()
這裏是模塊的一個類,它執行「繁重」,我想跟蹤進度。
#Work_Module.py
class Work:
def __init__(self):
#Do some intensive work
main():
for idx, job in enumerate(work_list):
Work()
import GUI
percentage_done = idx/len(job_list) * 100
GUI.progress_bar.step(percentage_done)
我遇到的問題是progress_bar在Work_Module中的值爲None。它在GUI模塊中被分配了一個對象,但是當試圖從Work_Module引用它時,該對象不會被保留。我知道,在main方法導入GUI是一種奇怪的,我懷疑這是某種形式的命名空間問題或圓形進口的問題,但我似乎不能想辦法解決這個問題。
這:
如果你喜歡,你還可以與
progress_bar
的global
方面免除解決了無類型被分配到progress_bar的問題,但現在我看到的問題是進度條不會增量更新。在work_module完成所有工作後,進度條跳轉到最後。 – sager89@ sager89:你可能不得不讓/告訴'tkinter'更新屏幕。 –
我不得不創建一個單獨的線程來完成這項工作,因爲GUI是一個阻塞呼叫。之後,它工作了! – sager89