我正在尝试创建一个 PyQt5 应用程序,我在其中使用了某些标签来显示状态变量。为了更新它们,我pyqtSignal
手动实现了自定义。但是,在调试时,我发现 GUI 的值QLabel
发生了变化,但这些值并没有反映在主窗口上。
一些答案建议QApplication().processEvents()
偶尔打电话。但是,这会立即使应用程序崩溃并冻结应用程序。
这是一个示例代码(所有必需的库都已导入,这只是造成问题的部分,实际代码很大):
from multiprocessing import Process
def sub(signal):
i = 0
while (True):
if (i % 5 == 0):
signal.update(i)
class CustomSignal(QObject):
signal = pyqtSignal(int)
def update(value):
self.signal.emit(value)
class MainApp(QWidget):
def __init__(self):
super().__init__()
self.label = QLabel("0");
self.customSignal = CustomSignal()
self.subp = Process(target=sub, args=(customSignal,))
self.subp.start()
self.customSignal.signal.connect(self.updateValue)
def updateValue(self, value):
print("old value", self.label.text())
self.label.setText(str(value))
print("new value", self.label.text())
print
语句的输出符合预期。但是,标签中的文本不会改变。
in 中的update
函数CustomSignal
被某个线程调用。我已经应用了相同的方法来更新进度条,效果很好。
除此以外,还有其他解决方法processEvents()
吗?
操作系统是 Ubuntu 16.04。