首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt5:如何连接()和发射()

PyQt5:如何连接()和发射()
EN

Stack Overflow用户
提问于 2018-12-28 01:02:56
回答 1查看 4K关注 0票数 3

我正在尝试将代码从PyQt4移植到PyQt5,但我不明白为什么下面的方法不起作用。插槽未被调用。我看到一堆扁虫,但没有扁担。我遗漏了什么?

代码语言:javascript
复制
from PyQt5 import QtCore
import time

# expect to see ticks & tocks
class Alarm(QtCore.QThread, QtCore.QObject):
    signal = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(Alarm, self).__init__(parent)
        self.signal.connect(self.eventp)
        self.start()

    def run(self):
        while True:
            print('tick')
            self.signal.emit()
            time.sleep(1)

    @QtCore.pyqtSlot()
    def eventp(self):
        print('Tock')

# main
alarm = Alarm()
time.sleep(6)  # wait for countdown, then terminate
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-28 01:49:45

首先,QThread已经继承了QObject,所以没有必要将其用作接口。另一方面,QThread必须存在于eventloop中,因为这是允许信号传输的原因,例如,在您的示例中,您使用time.sleep(6)阻塞eventloop,而如果您希望在6秒后完成循环,请使用QTimer:

代码语言:javascript
复制
import time
from PyQt5 import QtCore
# expect to see ticks & tocks
class Alarm(QtCore.QThread):
    signal = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(Alarm, self).__init__(parent)
        self.signal.connect(self.eventp)
        self.start()

    def run(self):
        while True:
            print('tick')
            self.signal.emit()
            time.sleep(1)

    @QtCore.pyqtSlot()
    def eventp(self):
        print('Tock')

if __name__ == '__main__':
    import sys
    app = QtCore.QCoreApplication(sys.argv)
    alarm = Alarm()
    QtCore.QTimer.singleShot(6*1000, QtCore.QCoreApplication.quit)
    sys.exit(app.exec_())
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53948455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档