gpt4 book ai didi

python - Tkinter:从不同模块更新小部件

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:16 26 4
gpt4 key购买 nike

我有一个用 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 有点奇怪,我怀疑这是某种命名空间问题或循环导入问题,但我似乎想不出解决这个问题的方法。

最佳答案

一种方法是在调用 mainloop() 之前将 progress_bar 注入(inject)到 Work_Module 中:

def main():
root = tk.Tk()
app = Application(master=root)
Work_Module.progress_bar = progress_bar
app.mainloop()

如果你愿意,你也可以省略 progress_barglobal 方面:

    def create_widgets(self):
# global progress_bar (no longer needed)
# add 'self'
self.progress_bar = tk.ttk.Progressbar(orient=tk.HORIZONTAL, length=200, mode='determinate')
self.progress_bar.pack(side="bottom")
...

def main():
root = tk.Tk()
app = Application(master=root)
Work_Module.progress_bar = self.progress_bar # add 'self'
app.mainloop()

关于python - Tkinter:从不同模块更新小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com