【发布时间】:2020-08-09 06:44:53
【问题描述】:
我想从另一个模块更新我的主 gui 类中的进度条。由于必须在 gui 仍在其主事件循环中运行时更新进度条值,因此我为它创建了一个线程。我无法从线程更新进度值。
这只是我真正想做的简单代码,但它会产生同样的错误。
progress.py
from time import sleep
from PyQt5.QtCore import QObject, pyqtSignal
class ProgressUpdate(QObject):
progress_signal = pyqtSignal(int)
def __init__(self):
super().__init__()
self.progress_update()
def progress_update(self):
for i in range(0, 101):
self.progress_signal.emit(i)
sleep(0.01)
main.py
from PyQt5.QtWidgets import QVBoxLayout, QApplication, QProgressBar, QWidget
from PyQt5 import QtCore
import sys
from progress import ProgressUpdate
class Example(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.progress_bar = QProgressBar(self)
self.vbox = QVBoxLayout(self)
self.vbox.addWidget(self.progress_bar)
self.setLayout(self.vbox)
self.setWindowTitle('Progress')
self.p_thread = ProgressThread()
self.p_thread.start()
self.show()
def update_progress(self, val):
self.progress_bar.setValue(val)
class ProgressThread(QtCore.QThread):
def __init__(self):
super().__init__()
def run(self):
self.obj = ProgressUpdate()
self.obj.progress_signal.connect(Example.update_progress)
def main():
app = QApplication(sys.argv)
p = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
当我运行这个时,进度条出现了,但它停留在 0,它没有更新。
【问题讨论】:
标签: python-3.x pyqt5 progress-bar signals-slots