Как изменить положение кнопок

#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_())