我正在尝试创建一个PyQt5应用程序,其中我使用了某些标签来显示状态变量。要更新它们,我已手动实施自定义pyqtSignal
。但是,在调试时,我发现GUI QLabel
的值已更改,但这些值未反映在主窗口上。为什么有些小部件不会在Qt5上更新?
有些答案建议偶尔拨打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
报表的输出。但是,标签中的文字不会更改。
CustomSignal
中的update
函数被某个线程调用。 我已经应用相同的方法来更新进度条,它工作正常。
除此之外,是否还有其他解决方案?processEvents()
?
操作系统是Ubuntu 16.04。
显示您的代码以帮助您 – eyllanesc
添加示例代码。 –
请发布一个完整的代码(或至少一个完整代码的精简版),否则我们很难复制这个问题,只是看代码的一部分并帮助你。 – Eddie