我需要当按下“左”或“右”按钮时,图片会不停地移动,直到用户释放按钮,我的代码是:
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.Qt import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
centralWidget = QtWidgets.QWidget() # !!! +++
self.setCentralWidget(centralWidget) # !!! +++
self.btn1 = QPushButton(centralWidget)
self.btn1.setMouseTracking(True)
self.btn1.setText("<-- Влево")
# ??? ------> v
# self.btn1.setStyleSheet("background-color: pink; border-radius: 14px;}")
self.btn1.setStyleSheet("background-color: pink; border-radius: 14px;")
self.btn1.setFont(QtGui.QFont("Pusia-Bold.otf", 17, QtGui.QFont.Bold))
self.btn1.resize(300, 150)
self.btn1.move(100, 400)
self.btn1.clicked.connect(lambda : self.on_clicked("Влево"))
self.btn2 = QPushButton(centralWidget)
self.btn2.setMouseTracking(True);
self.btn2.setText("Вправо -->")
self.btn2.setStyleSheet("background-color: pink; border-radius: 14px;")
self.btn2.setFont(QtGui.QFont("Pusia-Bold.otf", 17, QtGui.QFont.Bold))
self.btn2.resize(300, 150)
self.btn2.move(500, 400)
self.btn2.clicked.connect(lambda : self.on_clicked("Вправо"))
self.lbl1 = QtWidgets.QLabel(centralWidget)
self.pix = QtGui.QPixmap("im.png").scaled(300, 300)
self.lbl1.setPixmap(self.pix)
self.lbl1.resize(300, 300)
self.lbl1.move(300, 20)
'''
self.spinBox = QSpinBox(centralWidget)
self.spinBox.setRange(5, 20)
self.spinBox.setValue(7)
self.spinBox.resize(100, 30)
self.spinBox.move(400, 560)
'''
self.num = 100
def on_clicked(self, text):
print(f'{text}')
if text == "Влево":
x, y = self.lbl1.pos().x(), self.lbl1.pos().y()
x = x-self.num if x-self.num > 0 else 0
self.lbl1.move(x, y)
elif text == "Вправо":
x, y = self.lbl1.pos().x(), self.lbl1.pos().y()
w = self.size().width() - self.lbl1.size().width()
x = x+self.num \
if x+self.num < w else w
self.lbl1.move(x, y)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ex = MainWindow()
ex.resize(900, 600)
ex.show()
sys.exit(app.exec_())
作为一种选择。
请注意,我更改了
сигналы
按钮并添加了QTimer
.