[英]Can,t resize QWidget from QThread in pyqt5
我想从另一个用 QThread 制作的线程调整我的 QWidget 的大小,但是当我这样做时,我的应用程序卡在加载中(崩溃)
这是我的代码:
from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QApplication, QWidget
from sys import exit
Application = QApplication([])
Window = QWidget()
thread = QThread()
thread.run = lambda: Window.resize(400, 100)
Window.show()
thread.start()
exit(Application.exec_())
不允许从Qt 主线程以外的线程访问 QWidgets。
请注意,访问意味着:创建新的小部件、读取/写入小部件属性或调用任何小部件功能。
唯一正确的方法是使用信号。 这允许 Qt 将信号排队(以防它检测到发送者或接收者在不同的线程上)并在其事件队列被正确处理后立即依赖接收者。
为了做到这一点,通常最好将 QThread 子类化(理论上可以在没有子类化的情况下这样做,但没有实际好处,它可能只会使事情比需要的更复杂)。
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget
from sys import exit
from time import sleep
class Mover(QThread):
move = pyqtSignal(int, int)
def run(self):
sleep(5)
self.move.emit(400, 100)
Application = QApplication([])
Window = QWidget()
thread = Mover()
thread.move.connect(Window.move)
Window.show()
thread.start()
exit(Application.exec_())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.