【发布时间】:2015-06-04 18:11:16
【问题描述】:
我有一个用 Python 3 编写的 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 有点奇怪,我怀疑这是某种命名空间问题或循环导入问题,但我似乎想不出解决这个问题的方法。
【问题讨论】:
标签: python python-3.x tkinter