python - 定时器无法连接到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)
解决方案
问题很简单,在函数中创建的变量是局部的,函数完成后会被消除,因此信号不会触发,而是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)
推荐阅读
- c# - Firebase 查询方法对我不起作用,我似乎找不到任何方法
- android - java.lang.ClassNotFoundException:找不到类“java.time.LocalDateTime”
- python - 添加 Flask 用户登录要求
- php - Sqlite在执行时显示错误
- python - 创建具有唯一请求的线程时出现问题
- c++ - 使用 QTest 模拟鼠标移动
- javascript - 避免尺寸检查后显示图像
- mongodb - MongoDB:文档大小对集合扫描性能和“工作集”内存占用有什么影响?
- flutter - 未处理的异常:将对象转换为可编码对象失败:摄影
- html - div中水平的文本图像