MCPcopy Index your code
hub / github.com/PyQt5/PyQt / WeltHideWindow

Class WeltHideWindow

Demo/WeltHideWindow.py:63–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61
62
63class WeltHideWindow(QWidget):
64 def __init__(self, *args, **kwargs):
65 super(WeltHideWindow, self).__init__(*args, **kwargs)
66 self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
67 self.resize(400, 300)
68 self._width = QApplication.desktop().availableGeometry(self).width()
69 layout = QGridLayout(self)
70 layout.addItem(
71 QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 0, 0
72 )
73 self.closeBtn = QPushButton("X", self)
74 layout.addWidget(self.closeBtn, 0, 1)
75 layout.addItem(
76 QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding), 1, 0
77 )
78 self.closeBtn.clicked.connect(self.close)
79 self.closeBtn.setMinimumSize(24, 24)
80 self.closeBtn.setMaximumSize(24, 24)
81
82 def mousePressEvent(self, event):
83 """鼠标按下事件,需要记录下坐标self._pos 和 是否可移动self._canMove"""
84 super(WeltHideWindow, self).mousePressEvent(event)
85 if event.button() == Qt.LeftButton:
86 self._pos = event.globalPos() - self.pos()
87 # 当窗口最大化或者全屏时不可移动
88 self._canMove = not self.isMaximized() or not self.isFullScreen()
89
90 def mouseMoveEvent(self, event):
91 """鼠标移动事件,动态调整窗口位置"""
92 super(WeltHideWindow, self).mouseMoveEvent(event)
93 if event.buttons() == Qt.LeftButton and self._canMove:
94 self.move(event.globalPos() - self._pos)
95
96 def mouseReleaseEvent(self, event):
97 """鼠标弹起事件,这个时候需要判断窗口的左边是否符合贴到左边,顶部,右边一半"""
98 super(WeltHideWindow, self).mouseReleaseEvent(event)
99 self._canMove = False
100 pos = self.pos()
101 x = pos.x()
102 y = pos.y()
103 if x < 0:
104 # 隐藏到左边
105 return self.move(1 - self.width(), y)
106 if y < 0:
107 # 隐藏到顶部
108 return self.move(x, 1 - self.height())
109 if x > self._width - self.width() / 2: # 窗口进入右边一半距离
110 # 隐藏到右边
111 return self.move(self._width - 1, y)
112
113 def enterEvent(self, event):
114 """鼠标进入窗口事件,用于弹出显示窗口"""
115 super(WeltHideWindow, self).enterEvent(event)
116 pos = self.pos()
117 x = pos.x()
118 y = pos.y()
119 if x < 0:
120 return self.move(0, y)

Callers 1

WeltHideWindow.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected