PyQt:将信号连接到插槽以启动后台操作
我有以下代码scan_value
在更新ui(progress
)中的进度条时执行后台操作()。scan_value
迭代某个值obj
,value_changed
每次更改值时发出signal()。由于这里不相关的原因,我必须将它包装Scanner
在另一个线程的object()中。当一个按钮扫描仪被称为scan
是clicked
。这是我的问题...以下代码工作正常(即进度条按时更新)。
# I am copying only the relevant code here.def update_progress_bar(new, old): fraction = (new - start) / (stop - start) progress.setValue(fraction * 100)obj.value_changed.connect(update_progress_bar)class Scanner(QObject): def scan(self): scan_value(start, stop, step) progress.setValue(100)thread = QThread()scanner = Scanner()scanner.moveToThread(thread)thread.start()scan.clicked.connect(scanner.scan)
但如果我将最后一部分更改为:
thread = QThread()scanner = Scanner()scan.clicked.connect(scanner.scan) # This was at the end!scanner.moveToThread(thread)thread.start()
进度条仅在结束时更新(我的猜测是所有内容都在同一个线程上运行)。如果在将对象接收对象移动到线程之前将信号连接到插槽,是否应该无关紧要。
饮歌长啸
繁华开满天机
相关分类