第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pyqt5 兩個 QButton 拖放

Pyqt5 兩個 QButton 拖放

慕田峪7331174 2022-08-25 16:06:58
窗口中有兩個名為 Button1 和 Button2 的按鈕。在下面的代碼中,我可以通過右鍵單擊名為 Button1 的按鈕來移動它。當我想右鍵單擊并拖動 Button2 時,Button1 再次移動。但是我無法用下面的代碼移動按鈕2。我想移動這兩個按鈕中的哪一個右鍵單擊。我該怎么做?from PyQt5.QtWidgets import QPushButton, QWidget, QApplicationfrom PyQt5.QtCore import Qt, QMimeDatafrom PyQt5.QtGui import QDragimport sysclass Button(QPushButton):    def __init__(self, title, parent):        super().__init__(title, parent)    def mouseMoveEvent(self, e):        if e.buttons() != Qt.RightButton:            return        mimeData = QMimeData()        drag = QDrag(self)        drag.setMimeData(mimeData)        drag.setHotSpot(e.pos() - self.rect().topLeft())        dropAction = drag.exec_(Qt.MoveAction)    def mousePressEvent(self, e):        super().mousePressEvent(e)        if e.button() == Qt.LeftButton:            print('press')class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.setAcceptDrops(True)        self.button1 = Button('Button1', self)        self.button1.setFixedSize(100,100)        self.button1.move(0, 0)        self.button2 = Button('Button2', self)        self.button2.move(0, 110)        self.setWindowTitle('Click or Move')        self.setGeometry(0, 0, 400, 400)    def dragEnterEvent(self, e):        e.accept()    def dropEvent(self, e):        position = e.pos()        print(position)        self.button1.move(position)        e.setDropAction(Qt.MoveAction)        e.accept()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    ex.show()    app.exec_() 
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

你不需要子類化一個按鈕來移動它,如果你要在同一父級中移動對象,你當然不應該使用拖放。

此外,如果您要僅檢查按下右鍵時發(fā)生的移動,則應始終為其他情況調用基本實現(xiàn)(其他按鈕,或無按鈕,以防鼠標跟蹤;按鈕通常不是這種情況,但這不是重點)。

在按鈕上安裝事件篩選器,并跟蹤以下事件:

  • QEvent.MouseButtonPress:如果按鈕是正確的,則為當前移動的小部件設置一個變量,并為當前鼠標位置設置另一個變量(假設,startPosition)

  • QEvent.MouseMove:如果當前移動小部件存在,請使用公式移動它newPosition = currentPosition + eventPosition - startPosition

  • QEvent.MouseButtonRelease:清除當前移動的小部件

class Example(QWidget):


    def __init__(self):

        super().__init__()


        self.initUI()


        self.movingButton = None


    def initUI(self):


        self.button1 = QPushButton('Button1', self)

        self.button1.setFixedSize(100,100)

        # no need for this, every new widget is always placed at (0, 0)

        # self.button1.move(0, 0)

        self.button1.installEventFilter(self)


        self.button2 = QPushButton('Button2', self)

        self.button2.move(0, 110)

        self.button2.installEventFilter(self)


        self.setWindowTitle('Click or Move')

        self.setGeometry(0, 0, 400, 400)


    def eventFilter(self, source, event):

        if source in (self.button1, self.button2):

            if event.type() == QEvent.MouseButtonPress and event.button() == Qt.RightButton:

                self.movingButton = source

                self.startPos = event.pos()

            # uncomment the following lines if you want to move the button while

            # moving the mouse

            # elif event.type() == QEvent.MouseMove and self.movingButton:

            #     self.movingButton.move(source.pos() + event.pos() - self.startPos)

            elif event.type() == QEvent.MouseButtonRelease and self.movingButton:

                self.movingButton.move(source.pos() + event.pos() - self.startPos)

                self.movingButton = None

        return super().eventFilter(source, event)


查看完整回答
反對 回復 2022-08-25
  • 1 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號