Loading ui/framelesswindow/fw_qt6/utils/win32_utils.py +39 −13 Original line number Diff line number Diff line Loading @@ -8,9 +8,12 @@ import win32api import win32con import win32gui import win32print from win32comext.shell import shellcon from qtpy.QtCore import QOperatingSystemVersion from qtpy.QtGui import QGuiApplication from win32comext.shell import shellcon from qtpy import API USE_PYSIDE6 = API == 'pyside6' def isMaximized(hWnd): Loading Loading @@ -171,7 +174,30 @@ def isGreaterEqualVersion(version): """ return QOperatingSystemVersion.current() >= version if USE_PYSIDE6: from PySide6.QtCore import QVersionNumber def isGreaterEqualWin8_1(): """ determine if the windows version ≥ Win8.1 """ cv = QOperatingSystemVersion.current() cv = QVersionNumber(cv.majorVersion(), cv.minorVersion(), cv.microVersion()) return cv >= QVersionNumber(8, 1, 0) def isGreaterEqualWin10(): """ determine if the windows version ≥ Win10 """ return "Windows-10" in platform() def isGreaterEqualWin11(): """ determine if the windows version ≥ Win10 """ return isGreaterEqualWin10() and sys.getwindowsversion().build >= 22000 def isWin7(): """ determine if the windows version is Win7 """ return "Windows-7" in platform() else: def isGreaterEqualWin8_1(): """ determine if the windows version ≥ Win8.1 """ return isGreaterEqualVersion(QOperatingSystemVersion.Windows8_1) Loading ui/framelesswindow/fw_qt6/windows/__init__.py +16 −9 Original line number Diff line number Diff line Loading @@ -30,7 +30,16 @@ class WindowsFramelessWindow(QWidget): # self.titleBar = TitleBar(self) self._isResizeEnabled = True # remove window border self.updateFrameless() # solve issue #5 self.windowHandle().screenChanged.connect(self.__onScreenChanged) # self.resize(500, 500) # self.titleBar.raise_() def updateFrameless(self): """ update frameless window """ if not win_utils.isWin7(): self.setWindowFlags(self.windowFlags() | Qt.WindowType.FramelessWindowHint) else: Loading @@ -42,11 +51,6 @@ class WindowsFramelessWindow(QWidget): if not isinstance(self, AcrylicWindow): self.windowEffect.addShadowEffect(self.winId()) # solve issue #5 self.windowHandle().screenChanged.connect(self.__onScreenChanged) # self.titleBar.raise_() # def setTitleBar(self, titleBar): # """ set custom title bar Loading Loading @@ -78,7 +82,8 @@ class WindowsFramelessWindow(QWidget): pos = QCursor.pos() xPos = pos.x() - self.x() yPos = pos.y() - self.y() w, h = self.width(), self.height() w = self.frameGeometry().width() h = self.frameGeometry().height() # fixes https://github.com/zhiyiYo/PyQt-Frameless-Window/issues/98 bw = 0 if win_utils.isMaximized(msg.hWnd) or win_utils.isFullScreen(msg.hWnd) else self.BORDER_WIDTH Loading Loading @@ -152,6 +157,10 @@ class AcrylicWindow(WindowsFramelessWindow): super().__init__(parent=parent) self.__closedByKey = False self.updateFrameless() self.setStyleSheet("AcrylicWindow{background:transparent}") def updateFrameless(self): self.setWindowFlags(Qt.WindowType.FramelessWindowHint) self.windowEffect.enableBlurBehindWindow(self.winId()) self.windowEffect.addWindowAnimation(self.winId()) Loading @@ -164,8 +173,6 @@ class AcrylicWindow(WindowsFramelessWindow): if win_utils.isGreaterEqualWin11(): self.windowEffect.addShadowEffect(self.winId()) self.setStyleSheet("AcrylicWindow{background:transparent}") def nativeEvent(self, eventType, message): """ Handle the Windows message """ msg = MSG.from_address(message.__int__()) Loading Loading
ui/framelesswindow/fw_qt6/utils/win32_utils.py +39 −13 Original line number Diff line number Diff line Loading @@ -8,9 +8,12 @@ import win32api import win32con import win32gui import win32print from win32comext.shell import shellcon from qtpy.QtCore import QOperatingSystemVersion from qtpy.QtGui import QGuiApplication from win32comext.shell import shellcon from qtpy import API USE_PYSIDE6 = API == 'pyside6' def isMaximized(hWnd): Loading Loading @@ -171,7 +174,30 @@ def isGreaterEqualVersion(version): """ return QOperatingSystemVersion.current() >= version if USE_PYSIDE6: from PySide6.QtCore import QVersionNumber def isGreaterEqualWin8_1(): """ determine if the windows version ≥ Win8.1 """ cv = QOperatingSystemVersion.current() cv = QVersionNumber(cv.majorVersion(), cv.minorVersion(), cv.microVersion()) return cv >= QVersionNumber(8, 1, 0) def isGreaterEqualWin10(): """ determine if the windows version ≥ Win10 """ return "Windows-10" in platform() def isGreaterEqualWin11(): """ determine if the windows version ≥ Win10 """ return isGreaterEqualWin10() and sys.getwindowsversion().build >= 22000 def isWin7(): """ determine if the windows version is Win7 """ return "Windows-7" in platform() else: def isGreaterEqualWin8_1(): """ determine if the windows version ≥ Win8.1 """ return isGreaterEqualVersion(QOperatingSystemVersion.Windows8_1) Loading
ui/framelesswindow/fw_qt6/windows/__init__.py +16 −9 Original line number Diff line number Diff line Loading @@ -30,7 +30,16 @@ class WindowsFramelessWindow(QWidget): # self.titleBar = TitleBar(self) self._isResizeEnabled = True # remove window border self.updateFrameless() # solve issue #5 self.windowHandle().screenChanged.connect(self.__onScreenChanged) # self.resize(500, 500) # self.titleBar.raise_() def updateFrameless(self): """ update frameless window """ if not win_utils.isWin7(): self.setWindowFlags(self.windowFlags() | Qt.WindowType.FramelessWindowHint) else: Loading @@ -42,11 +51,6 @@ class WindowsFramelessWindow(QWidget): if not isinstance(self, AcrylicWindow): self.windowEffect.addShadowEffect(self.winId()) # solve issue #5 self.windowHandle().screenChanged.connect(self.__onScreenChanged) # self.titleBar.raise_() # def setTitleBar(self, titleBar): # """ set custom title bar Loading Loading @@ -78,7 +82,8 @@ class WindowsFramelessWindow(QWidget): pos = QCursor.pos() xPos = pos.x() - self.x() yPos = pos.y() - self.y() w, h = self.width(), self.height() w = self.frameGeometry().width() h = self.frameGeometry().height() # fixes https://github.com/zhiyiYo/PyQt-Frameless-Window/issues/98 bw = 0 if win_utils.isMaximized(msg.hWnd) or win_utils.isFullScreen(msg.hWnd) else self.BORDER_WIDTH Loading Loading @@ -152,6 +157,10 @@ class AcrylicWindow(WindowsFramelessWindow): super().__init__(parent=parent) self.__closedByKey = False self.updateFrameless() self.setStyleSheet("AcrylicWindow{background:transparent}") def updateFrameless(self): self.setWindowFlags(Qt.WindowType.FramelessWindowHint) self.windowEffect.enableBlurBehindWindow(self.winId()) self.windowEffect.addWindowAnimation(self.winId()) Loading @@ -164,8 +173,6 @@ class AcrylicWindow(WindowsFramelessWindow): if win_utils.isGreaterEqualWin11(): self.windowEffect.addShadowEffect(self.winId()) self.setStyleSheet("AcrylicWindow{background:transparent}") def nativeEvent(self, eventType, message): """ Handle the Windows message """ msg = MSG.from_address(message.__int__()) Loading