首页 > 解决方案 > 定时器无法连接到pyqt5中的插槽

问题描述

我无法将计时器连接到 move() 插槽 timer.timeout.connect( self.move),这不起作用,但这QtCore.QTimer.singleShot(50, self.move)只是一步而已。

class Bullet(QGraphicsRectItem):
    def __init__(self):
        super().__init__()

        self.setRect(0,0,10,50)

        #timer = QTimer()
        #timer.timeout.connect( self.move)
        #timer.start(50)
        QtCore.QTimer.singleShot(50, self.move)

    def move(self):
        print("Timer Clicked")
        self.setPos(self.x(), self.y()-10)

标签: pythonpyqtpyqt5

解决方案


问题很简单,在函数中创建的变量是局部的,函数完成后会被消除,因此信号不会触发,而是QTimer.singleShot()具有全局范围,解决方案是扩展定时器的范围,为此你必须使它成为类的成员。

class Bullet(QGraphicsRectItem):
    def __init__(self):
        super().__init__()

        self.setRect(0,0,10,50)

        self.timer = QTimer()
        self.timer.timeout.connect(self.move)
        self.timer.start(50)

    def move(self):
        print("Timer Clicked")
        self.setPos(self.x(), self.y()-10)

推荐阅读