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中对应变量没有赋值导致程序崩溃。