#python #pyside2
#python #pyside2
Вопрос:
В моей программе у меня есть набор кнопок, где каждая кнопка может быть перемещена .. Мне удалось изменить положение одной кнопки. Как изменить положение выбранной кнопки.
Например, когда вы перетаскиваете кнопку 1, перемещается только кнопка 1, когда вы перетаскиваете кнопку 2, перемещается только кнопка 2
Мой код :
import sys
from PySide2 import QtCore, QtGui, QtWidgets, QtQuick
from PySide2.QtWidgets import *
from PySide2.QtCore import *
class mainHMI (QWidget):
def __init__(self):
super().__init__()
self.button = {}
self.width = 705
self.height = 437
self.Label = QLabel(self)
self.Label.resize(self.width, self.height)
#Add Button
mainHMI.fun_button(self)
#show
self.show()
def fun_button (self) :
i=5
self.nbre_Lighthing_in_floor0 = 10
for j in range(self.nbre_Lighthing_in_floor0) :
self.button[j] = QPushButton(self.Label)
self.button[j].setGeometry(QRect(i, 90, 50, 50))
self.button[j].setMinimumSize(QSize(55, 55))
self.button[j].setMaximumSize(QSize(55, 55))
self.button[j].setText("button" str(j 1))
self.button[j].setObjectName("button" str(j))
self.button[j].show()
i = i 70
def mouseMoveEvent(self,vent):
self.button[0].move(vent.x(),vent.y())
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = mainHMI()
sys.exit(app.exec_())
Комментарии:
1. Прежде всего, я нахожу очень странным, что вы содержите кнопки в dict, а не в списке, но почему в
mouseMoveEvent
том, что вы пишетеself.button[0]
, не должно ли оно всегда менять только первую кнопку?2. @Arzybek, я могу переместить одну кнопку, изменив значение i self.button [i] . Но я за то, чтобы изменить любую кнопку, и я не знаю, как
Ответ №1:
Переопределите mouseMoveEvent
в подклассе QPushButton для перемещения кнопки.
class MovableButton(QPushButton):
def mousePressEvent(self, event):
self.origin = event.pos()
super().mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.buttons() amp; Qt.LeftButton:
self.move(event.windowPos().toPoint() - self.origin)
super().mouseMoveEvent(event)
class mainHMI(QWidget):
def __init__(self):
super().__init__()
self.button = {}
self.width = 705
self.height = 437
self.Label = QLabel(self)
self.Label.resize(self.width, self.height)
#Add Button
mainHMI.fun_button(self)
#show
self.show()
def fun_button (self) :
i=5
self.nbre_Lighthing_in_floor0 = 10
for j in range(self.nbre_Lighthing_in_floor0) :
self.button[j] = MovableButton(self.Label)
self.button[j].setGeometry(QRect(i, 90, 50, 50))
self.button[j].setMinimumSize(QSize(55, 55))
self.button[j].setMaximumSize(QSize(55, 55))
self.button[j].setText("button" str(j 1))
self.button[j].setObjectName("button" str(j))
self.button[j].show()
i = i 70
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = mainHMI()
sys.exit(app.exec_())