133 lines
5.0 KiB
Python
133 lines
5.0 KiB
Python
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()
|