1 # -*- coding:utf-8 -*- 2 ''' 3 Created on Sep 21, 2018 4 5 @author: SaShuangYiBing 6 7 Comment: 8 ''' 9 import sys 10 from PyQt5.QtCore import Qt,QMimeData 11 from PyQt5.QtGui import QDrag 12 from PyQt5.QtWidgets import QApplication,QWidget,QPushButton 13 14 class Button(QPushButton): 15 def __init__(self,title,parent): 16 super().__init__(title,parent) 17 18 def mouseMoveEvent(self, e): 19 if e.buttons() != Qt.RightButton: 20 return 21 22 mimedata = QMimeData() 23 drag = QDrag(self) 24 drag.setMimeData(mimedata) 25 drag.setHotSpot(e.pos()-self.rect().topLeft()) 26 dropAction = drag.exec_(Qt.MoveAction) 27 28 def mousePressEvent(self, e): 29 QPushButton.mousePressEvent(self,e) 30 if e.button() == Qt.LeftButton: 31 print ('Press') 32 33 class New_test(QWidget): 34 def __init__(self): 35 super().__init__() 36 self.initUI() 37 38 def initUI(self): 39 self.setAcceptDrops(True) 40 self.button = Button('Button',self) 41 self.button.move(100,65) 42 43 self.setGeometry(300,300,280,150) 44 self.setWindowTitle('Click or Move') 45 self.show() 46 47 def dragEnterEvent(self, e): 48 e.accept() 49 50 def dropEvent(self, e): 51 position = e.pos() 52 self.button.move(position) 53 54 e.setDropAction(Qt.MoveAction) 55 e.accept() 56 57 if __name__ == '__main__': 58 app = QApplication(sys.argv) 59 ex = New_test() 60 sys.exit(app.exec_()) 61 62 63
在Button上右键拖动时,按钮会跟随鼠标移动,如果是在Button左键时,会在控制台上打印出 "press"