1 import sys 2 from PyQt5.Qt import * 3 4 class Mwindow(QWidget): 5 leftclick = False 6 7 def __init__(self): 8 super().__init__() 9 self.resize(500,500) 10 self.move(250,150) 11 self.setup_Ui() 12 13 def setup_Ui(self): 14 # self.btn = QPushButton(self) 15 # self.btn.setText("点击我") 16 # self.btn.move(230,150) 17 pass 18 19 # def mousePressEvent(self, evt) : (在窗口中直接拖动) 20 # 21 # if evt.button() == Qt.LeftButton: 22 # self.leftclick = True 23 # self.mouse_x = evt.globalX() 24 # self.mouse_y = evt.globalY() 25 # self.btn_x = self.btn.x() 26 # self.btn_y = self.btn.y() 27 # 28 # 29 # def mouseMoveEvent(self, evt): 30 # if self.leftclick == True: 31 # move_x = evt.globalX()-self.mouse_x 32 # move_y = evt.globalY()-self.mouse_y 33 # self.btn.move(self.btn_x+move_x,self.btn_y+move_y) 34 # 35 # def mouseReleaseEvent(self, evt3) : 36 # self.leftclick = False 37 38 class Mypussbutton(QPushButton): 39 longclick = False 40 41 def mousePressEvent(self, evt): 42 if evt.button() == Qt.LeftButton: 43 self.longclick = True 44 self.mouse_x = evt.globalX() 45 self.mouse_y = evt.globalY() 46 self.btn_x = self.x() 47 self.btn_y = self.y() 48 49 def mouseMoveEvent(self, evt): 50 if self.longclick == True: 51 move_x = evt.globalX() - self.mouse_x 52 move_y = evt.globalY() - self.mouse_y 53 self.move(self.btn_x+move_x,self.btn_y+move_y) 54 print(self.btn_x + move_x, self.btn_y + move_y) 55 def mouseReleaseEvent(self, evt): 56 self.longclick = False 57 58 59 if __name__ == '__main__': 60 app = QApplication(sys.argv) 61 win = Mwindow() 62 # win.setMouseTracking(True) 63 btn = Mypussbutton(win) 64 btn.setText("点击我") 65 btn.move(250,150) 66 btn.setMouseTracking(True) 67 win.show() 68 sys.exit(app.exec_())
mousePressEvent 中一定要有一个判定变量,避免鼠标移入控件时,PressEvent中对应变量没有赋值导致程序崩溃。