From a4adf87f2e9c3fa712ea5a07f0b65c51edee1900 Mon Sep 17 00:00:00 2001 From: Irony <892768447@qq.com> Date: Mon, 26 Feb 2024 11:54:48 +0800 Subject: [PATCH] =?UTF-8?q?#187=20=E5=A2=9E=E7=9A=84=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=B8=8D=E6=94=AF=E6=8C=81gnome?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Demo/WeltHideWindow.py | 89 +++++++++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 15 deletions(-) mode change 100644 => 100755 Demo/WeltHideWindow.py diff --git a/Demo/WeltHideWindow.py b/Demo/WeltHideWindow.py old mode 100644 new mode 100755 index 5faa20b..91a49f9 --- a/Demo/WeltHideWindow.py +++ b/Demo/WeltHideWindow.py @@ -10,26 +10,77 @@ @description: 简单的窗口贴边隐藏 """ +import os +import platform +from subprocess import getoutput + try: from PyQt5.QtCore import Qt - from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QApplication + from PyQt5.QtWidgets import ( + QApplication, + QGridLayout, + QMessageBox, + QPushButton, + QSizePolicy, + QSpacerItem, + QWidget, + ) except ImportError: from PySide2.QtCore import Qt - from PySide2.QtWidgets import QWidget, QVBoxLayout, QPushButton, QApplication + from PySide2.QtWidgets import ( + QApplication, + QGridLayout, + QMessageBox, + QPushButton, + QSizePolicy, + QSpacerItem, + QWidget, + ) -class WeltHideWindow(QWidget): +def IsSupport(): + """判断是否支持""" + if platform.system() == "Linux": + name = os.environ.get("XDG_SESSION_DESKTOP", "") + os.environ.get( + "XDG_CURRENT_DESKTOP", "" + ) + if name.lower().find("gnome") != -1: + print("gnome desktop") + return False + + wid = getoutput("xprop -root _NET_SUPPORTING_WM_CHECK").split(" # ")[-1] + print("wid:", wid) + if wid: + name = getoutput("xprop -id %s _NET_WM_NAME" % wid) + print("name:", name) + if name.lower().find("gnome") != -1: + print("gnome desktop") + return False + return True + + +class WeltHideWindow(QWidget): def __init__(self, *args, **kwargs): super(WeltHideWindow, self).__init__(*args, **kwargs) self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint) - self.resize(800, 600) + self.resize(400, 300) self._width = QApplication.desktop().availableGeometry(self).width() - layout = QVBoxLayout(self) - layout.addWidget(QPushButton("关闭窗口", self, clicked=self.close)) + layout = QGridLayout(self) + layout.addItem( + QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 0, 0 + ) + self.closeBtn = QPushButton("X", self) + layout.addWidget(self.closeBtn, 0, 1) + layout.addItem( + QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding), 1, 0 + ) + self.closeBtn.clicked.connect(self.close) + self.closeBtn.setMinimumSize(24, 24) + self.closeBtn.setMaximumSize(24, 24) def mousePressEvent(self, event): - '''鼠标按下事件,需要记录下坐标self._pos 和 是否可移动self._canMove''' + """鼠标按下事件,需要记录下坐标self._pos 和 是否可移动self._canMove""" super(WeltHideWindow, self).mousePressEvent(event) if event.button() == Qt.LeftButton: self._pos = event.globalPos() - self.pos() @@ -37,13 +88,13 @@ def mousePressEvent(self, event): self._canMove = not self.isMaximized() or not self.isFullScreen() def mouseMoveEvent(self, event): - '''鼠标移动事件,动态调整窗口位置''' + """鼠标移动事件,动态调整窗口位置""" super(WeltHideWindow, self).mouseMoveEvent(event) if event.buttons() == Qt.LeftButton and self._canMove: self.move(event.globalPos() - self._pos) def mouseReleaseEvent(self, event): - '''鼠标弹起事件,这个时候需要判断窗口的左边是否符合贴到左边,顶部,右边一半''' + """鼠标弹起事件,这个时候需要判断窗口的左边是否符合贴到左边,顶部,右边一半""" super(WeltHideWindow, self).mouseReleaseEvent(event) self._canMove = False pos = self.pos() @@ -60,7 +111,7 @@ def mouseReleaseEvent(self, event): return self.move(self._width - 1, y) def enterEvent(self, event): - '''鼠标进入窗口事件,用于弹出显示窗口''' + """鼠标进入窗口事件,用于弹出显示窗口""" super(WeltHideWindow, self).enterEvent(event) pos = self.pos() x = pos.x() @@ -73,7 +124,7 @@ def enterEvent(self, event): return self.move(self._width - self.width(), y) def leaveEvent(self, event): - '''鼠标离开事件,如果原先窗口已经隐藏,并暂时显示,此时离开后需要再次隐藏''' + """鼠标离开事件,如果原先窗口已经隐藏,并暂时显示,此时离开后需要再次隐藏""" super(WeltHideWindow, self).leaveEvent(event) pos = self.pos() x = pos.x() @@ -86,10 +137,18 @@ def leaveEvent(self, event): return self.move(self._width - 1, y) -if __name__ == '__main__': +if __name__ == "__main__": import sys app = QApplication(sys.argv) - w = WeltHideWindow() - w.show() - sys.exit(app.exec_()) + if not IsSupport(): + QMessageBox.warning( + None, + "Warning", + "当前桌面不支持此功能", + ) + app.quit() + else: + w = WeltHideWindow() + w.show() + sys.exit(app.exec_())