繁体   English   中英

不能在pyqt5中从QThread调整QWidget的大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM