from PySide6 import QtWidgets from PySide6.QtCore import Qt from PySide6.QtWidgets import QMainWindow, QApplication from PySide6.QtGui import QCursor, QKeyEvent from ui.main import Ui_MainWindow import keyboard class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self._old_height = None self._old_width = None self._old_bottom = None self._old_right = None self._old_top = None self._old_left = None self.mouse_press_pos = None self.setupUi(self) # 鼠标跟踪 self.setMouseTracking(True) # 窗口置顶,隐藏 self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint) # 移动窗口标记 self._move_drag = False # 调整窗口标记 self._resize_drag = False self._resize_mode = None # 窗口快捷键 # shortcut = QShortcut(QKeySequence(Qt.Key_Space | Qt.ControlModifier), self) # shortcut.activated.connect(self.switchOpacity) # 注册全局快捷键 keyboard.add_hotkey('ctrl+space', self.switchOpacity) self.show() def mousePressEvent(self, event): if event.button() == Qt.LeftButton: # 获取窗口的边框位置 frame_rect = self.frameGeometry() self._old_left = frame_rect.left() self._old_top = frame_rect.top() self._old_right = frame_rect.right() self._old_bottom = frame_rect.bottom() self._old_width = frame_rect.width() self._old_height = frame_rect.height() self.mouse_press_pos = event.globalPosition().toPoint() # 判断鼠标是否处于边框范围内 if abs(self.mouse_press_pos.x() - self._old_left) < 5: self._resize_drag = True self._resize_mode = Qt.LeftEdge elif abs(self.mouse_press_pos.x() - self._old_right) < 5: self._resize_drag = True self._resize_mode = Qt.RightEdge elif abs(self.mouse_press_pos.y() - self._old_top) < 5: self._resize_drag = True self._resize_mode = Qt.TopEdge elif abs(self.mouse_press_pos.y() - self._old_bottom) < 5: self._resize_drag = True self._resize_mode = Qt.BottomEdge else: self._move_drag = True elif event.button() == Qt.RightButton: print('Right button pressed.') def mouseReleaseEvent(self, event): if event.button() == Qt.LeftButton: self._move_drag = False self._resize_drag = False QApplication.setOverrideCursor(QCursor(Qt.ArrowCursor)) elif event.button() == Qt.RightButton: print('Right button released.') def mouseDoubleClickEvent(self, event): if event.button() == Qt.LeftButton: print('Left button double-clicked.') elif event.button() == Qt.RightButton: print('Right button double-clicked.') def mouseMoveEvent(self, event): if Qt.LeftButton: current_pos = event.globalPosition().toPoint() delta = current_pos - self.mouse_press_pos if self._move_drag: self.mouse_press_pos = current_pos self.move(self.pos() + delta) if self._resize_drag: frame_rect = self.frameGeometry() # 根据边框调整模式,设置新的窗口位置和大小 if self._resize_mode == Qt.LeftEdge: self.setGeometry(self._old_left + delta.x(), self._old_top, self._old_width - delta.x(), self._old_height) cursor_shape = Qt.SizeHorCursor elif self._resize_mode == Qt.RightEdge: self.setGeometry(self._old_left, self._old_top, self._old_width + delta.x(), self._old_height) cursor_shape = Qt.SizeHorCursor elif self._resize_mode == Qt.TopEdge: self.setGeometry(self._old_left, self._old_top + delta.y(), self._old_width, self._old_height - delta.y()) cursor_shape = Qt.SizeVerCursor elif self._resize_mode == Qt.BottomEdge: self.setGeometry(self._old_left, self._old_top, self._old_width, self._old_height + delta.y()) cursor_shape = Qt.SizeVerCursor # 更改鼠标形状 QApplication.setOverrideCursor(QCursor(cursor_shape)) # 键盘事件 def keyPressEvent(self, event: QKeyEvent): # Esc 退出程序 if event.key() == Qt.Key_Escape: QApplication.quit() def switchOpacity(self): current_opacity = self.windowOpacity() if current_opacity == 1.0: self.setWindowOpacity(0) else: self.setWindowOpacity(1) app = QtWidgets.QApplication() window = MainWindow() app.exec()