调用对象class的方法时出现attributeError
attributeError when calling method of object class
from PyQt5 import uic
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QApplication([])
window = uic.loadUi("exercise2.ui")
class Car:
def __init__(self):
self.speed = 5
def accelerate(self):
if self.speed + 5 < 20:
self.speed += 5
return self.speed
def decelerate(self):
if self.speed - 5 >= 0:
self.speed -= 5
return self.speed
def animate(self):
currentX = window.car.x()
window.car.setGeometry(currentX + self.speed, 30, 120, 70)
movingCar = Car()
timer = QTimer()
timer.timeout.connect(movingCar.animate)
timer.start(40)
window.accelerateButton.clicked.connect(Car.accelerate)
window.brakeButton.clicked.connect(Car.decelerate)
window.show()
app.exec_()
正在尝试用加速和减速按钮制作汽车动画。当我按下按钮 accelerate/decelerate 时,我在两种方法的 'if' 语句中都收到错误“AttributeError:'bool' 对象没有属性 'speed'”。有人可以帮我弄清楚出了什么问题吗?谢谢!
您应该向 clicked.connect
传递一个绑定到相关对象的方法,而不是未绑定的方法 Car.accelerate
:
window.accelerateButton.clicked.connect(movingCar.accelerate)
window.brakeButton.clicked.connect(movingCar.decelerate)
from PyQt5 import uic
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QApplication([])
window = uic.loadUi("exercise2.ui")
class Car:
def __init__(self):
self.speed = 5
def accelerate(self):
if self.speed + 5 < 20:
self.speed += 5
return self.speed
def decelerate(self):
if self.speed - 5 >= 0:
self.speed -= 5
return self.speed
def animate(self):
currentX = window.car.x()
window.car.setGeometry(currentX + self.speed, 30, 120, 70)
movingCar = Car()
timer = QTimer()
timer.timeout.connect(movingCar.animate)
timer.start(40)
window.accelerateButton.clicked.connect(Car.accelerate)
window.brakeButton.clicked.connect(Car.decelerate)
window.show()
app.exec_()
正在尝试用加速和减速按钮制作汽车动画。当我按下按钮 accelerate/decelerate 时,我在两种方法的 'if' 语句中都收到错误“AttributeError:'bool' 对象没有属性 'speed'”。有人可以帮我弄清楚出了什么问题吗?谢谢!
您应该向 clicked.connect
传递一个绑定到相关对象的方法,而不是未绑定的方法 Car.accelerate
:
window.accelerateButton.clicked.connect(movingCar.accelerate)
window.brakeButton.clicked.connect(movingCar.decelerate)