我编写了一个包含嵌套类/线程和多个模块的大型程序。我现在想添加一个简单的 GUI 和一些标签来显示一些变量。但是,变量分散在整个模块和类中。我正在寻找一种在不过多更改当前代码的情况下将这些变量更新到 GUI 中的方法。
我对 Pyqt4 有一个基本的了解(我也会接受 tkinter 的答案)。
我尝试不使用信号/发射,因为据我所知,发射必须从 Qthread 发送,这意味着对我的代码进行彻底检查,将类和线程更改为 Qthread。如果可能的话,我想避免这样做。这是我尝试过的一个例子。
测试.py
class Update(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
for i in range(10):
time.sleep(2)
import test
wa.label.setText(str(i))
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
self.label = QLabel(" ")
layout = QVBoxLayout()
layout.addWidget(self.label)
self.setLayout(layout)
Update1 = Update()
Update1.start()
Update1.refresh1 = 'ba'
self.label.setText(Update1.refresh1)
if __name__ == "__main__":
app = QApplication(sys.argv)
wa = MyWindow()
wa.show()
sys.exit(app.exec_())
此代码有效,但我的变量需要从其他模块/类或线程更新。当我将“类更新”移动到这样的新模块中时:
测试.py
import test2
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
self.label = QLabel(" ")
layout = QVBoxLayout()
layout.addWidget(self.label)
self.setLayout(layout)
Update1 = test2.Update()
Update1.start()
Update1.refresh1 = 'ba'
self.label.setText(Update1.refresh1)
if __name__ == "__main__":
app = QApplication(sys.argv)
wa = MyWindow()
wa.show()
sys.exit(app.exec_())
test2.py #更新图形用户界面
class Update(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
for i in range(10):
time.sleep(2)
import test
test.wa.label.setText(str(i))
我得到:AttributeError: 'module' object has no attribute 'wa'
此外,我还在考虑将类 Update() 放入 Qthread,从任何已更新变量的模块/类运行它,并在 Update() 中使用 emit 函数。这将解决必须将我当前的类/线程更改为 Qthreads 的问题。
如果有人知道一种简单的方法,我可以通过调用类似 update() 的类来更新我的 GUI,我们将不胜感激