GUI.py と calcs.py の 2 つのモジュールを持つアプリで、GUI が calcs から関数をインポートして使用する場合、calcs 関数が GUI の進行状況バーを更新するための良い方法は何ですか?
すべてのコードを 1 つのモジュールに収めていたときは、以前は単純でした。私はそれを2つにリファクタリングしました(まだ学習中です...)が、これは現在修正できない唯一のものです。
たとえば、非常に単純な例として、GUI.py モジュールには次のものがあります。
import tkinter as tk
import tkinter.ttk as ttk
import calc as c
class GUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.prog = tk.DoubleVar()
self.result = tk.StringVar()
self.label = ttk.Label(textvariable = self.result)
self.progbar = ttk.Progressbar(self, maximum = 10, variable = self.prog)
self.button= ttk.Button(self, text = 'Go', command = lambda: self.result.set(c.stuff()))
self.label.pack()
self.progbar.pack()
self.button.pack()
a = GUI()
a.mainloop()
と calc.py を持つ:
def stuff():
counter = 0
for i in range(1, 11, 1):
counter += 1
# find a way to pass the value of counter to the GUI progress bar
# do lots of stuff that takes quite some time
return 'hey, a result!'
calc 関数のプログレス カウンターを GUI のプログレス バー変数にリンクする良い方法は何ですか?
それらが一緒に 1 つのモジュールにあるときは、もちろん十分に単純でした。
prog.set(counter)
a.update_idletasks()
しかし、もはや。これについてグーグルで読んで、スレッド化し、キューを使用してそれらをリンクしようとしましたが、これはa)やり過ぎのように見え、b)は困難でした...動作しませんでした...