obscuredSubtitles/main.py

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()