1
1
#!/usr/bin/env python
2
2
# -*- coding: utf-8 -*-
3
-
4
3
"""
5
4
Created on 2018年4月30日
6
5
@author: Irony
11
10
"""
12
11
13
12
try :
14
- from PyQt5 .QtCore import QTimer , Qt , QEvent , QObject
15
- from PyQt5 .QtGui import QWindow , QPainter , QColor , QMouseEvent
16
- from PyQt5 .QtWidgets import QApplication , QWidget , QMessageBox
13
+ from PyQt5 .QtCore import QEvent , QObject , QPoint , Qt , QTimer
14
+ from PyQt5 .QtGui import QColor , QMouseEvent , QPainter , QWindow
15
+ from PyQt5 .QtWidgets import QApplication , QMessageBox , QWidget
17
16
except ImportError :
18
- from PySide2 .QtCore import QTimer , Qt , QEvent , QObject
17
+ from PySide2 .QtCore import QTimer , Qt , QEvent , QObject , QPoint
19
18
from PySide2 .QtGui import QWindow , QPainter , QColor , QMouseEvent
20
19
from PySide2 .QtWidgets import QApplication , QWidget , QMessageBox
21
20
@@ -96,15 +95,25 @@ def moveOrResize(self, window, pos, width, height):
96
95
else :
97
96
if self .is_titlebar (pos ):
98
97
window .startSystemMove ()
98
+ # Fixed #172 主动触发一次鼠标释放事件,否则会导致鼠标悬停出问题
99
+ QApplication .instance ().postEvent (
100
+ window ,
101
+ QMouseEvent (QEvent .MouseButtonRelease , QPoint (- 1 , - 1 ),
102
+ Qt .LeftButton , Qt .NoButton , Qt .NoModifier ))
99
103
100
104
def eventFilter (self , obj , event ):
101
105
if obj .isWindowType ():
102
106
# top window 处理光标样式
103
- if event .type () == QEvent .MouseMove and obj .windowState () == Qt .WindowNoState :
104
- obj .setCursor (self ._get_cursor (self ._get_edges (event .pos (), obj .width (), obj .height ())))
107
+ if event .type () == QEvent .MouseMove and obj .windowState (
108
+ ) == Qt .WindowNoState :
109
+ obj .setCursor (
110
+ self ._get_cursor (
111
+ self ._get_edges (event .pos (), obj .width (),
112
+ obj .height ())))
105
113
elif event .type () == QEvent .TouchUpdate :
106
114
self .moveOrResize (obj , event .pos (), obj .width (), obj .height ())
107
- elif obj in self .Widgets and isinstance (event , QMouseEvent ) and event .button () == Qt .LeftButton :
115
+ elif obj in self .Widgets and isinstance (
116
+ event , QMouseEvent ) and event .button () == Qt .LeftButton :
108
117
if event .type () == QEvent .MouseButtonDblClick :
109
118
# 双击最大化还原
110
119
if self .is_titlebar (event .pos ()):
@@ -115,7 +124,8 @@ def eventFilter(self, obj, event):
115
124
else :
116
125
obj .showMaximized ()
117
126
elif event .type () == QEvent .MouseButtonPress :
118
- self .moveOrResize (obj .windowHandle (), event .pos (), obj .width (), obj .height ())
127
+ self .moveOrResize (obj .windowHandle (), event .pos (), obj .width (),
128
+ obj .height ())
119
129
120
130
return False
121
131
@@ -161,8 +171,8 @@ def paintEvent(self, event):
161
171
162
172
163
173
if __name__ == '__main__' :
164
- import sys
165
174
import cgitb
175
+ import sys
166
176
167
177
cgitb .enable (format = 'text' )
168
178
0 commit comments