Skip to content

Commit 3212ba0

Browse files
committed
fixed PyQt5#172 鼠标点击释放问题
1 parent 84f3a7e commit 3212ba0

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

Demo/NewFramelessWindow.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#!/usr/bin/env python
22
# -*- coding: utf-8 -*-
3-
43
"""
54
Created on 2018年4月30日
65
@author: Irony
@@ -11,11 +10,11 @@
1110
"""
1211

1312
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
1716
except ImportError:
18-
from PySide2.QtCore import QTimer, Qt, QEvent, QObject
17+
from PySide2.QtCore import QTimer, Qt, QEvent, QObject, QPoint
1918
from PySide2.QtGui import QWindow, QPainter, QColor, QMouseEvent
2019
from PySide2.QtWidgets import QApplication, QWidget, QMessageBox
2120

@@ -96,15 +95,25 @@ def moveOrResize(self, window, pos, width, height):
9695
else:
9796
if self.is_titlebar(pos):
9897
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))
99103

100104
def eventFilter(self, obj, event):
101105
if obj.isWindowType():
102106
# 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())))
105113
elif event.type() == QEvent.TouchUpdate:
106114
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:
108117
if event.type() == QEvent.MouseButtonDblClick:
109118
# 双击最大化还原
110119
if self.is_titlebar(event.pos()):
@@ -115,7 +124,8 @@ def eventFilter(self, obj, event):
115124
else:
116125
obj.showMaximized()
117126
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())
119129

120130
return False
121131

@@ -161,8 +171,8 @@ def paintEvent(self, event):
161171

162172

163173
if __name__ == '__main__':
164-
import sys
165174
import cgitb
175+
import sys
166176

167177
cgitb.enable(format='text')
168178

0 commit comments

Comments
 (0)