Files
Medical_Input_Helper/icon_window.py
T
2025-11-01 21:03:27 +05:00

124 lines
5.0 KiB
Python

from PyQt6.QtWidgets import QMainWindow, QVBoxLayout, QWidget, QPushButton, QGraphicsDropShadowEffect
from PyQt6.QtCore import Qt, pyqtSignal, QPoint
from PyQt6.QtGui import QMouseEvent, QColor
import time
class IconWindow(QMainWindow):
"""Окно с круглой иконкой приложения"""
icon_clicked = pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.parent = parent
self.dragging = False
self.drag_offset = QPoint()
self.setup_ui()
def setup_ui(self):
"""Настраивает интерфейс иконки"""
self.setWindowFlags(Qt.WindowType.FramelessWindowHint |
Qt.WindowType.WindowStaysOnTopHint |
Qt.WindowType.Tool)
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
self.setFixedSize(70, 70)
self.moved = False
self.start_position = None
self.icon_widget = QWidget()
self.icon_layout = QVBoxLayout(self.icon_widget)
self.icon_layout.setContentsMargins(10, 10, 10, 10)
self.icon_button = QPushButton("P")
self.icon_button.setFixedSize(50, 50)
self.icon_button.setStyleSheet("""
QPushButton {
background-color: rgba(30, 30, 30, 220);
border-radius: 25px;
color: white;
font-size: 22px;
font-weight: bold;
border: 4px solid #8e44ad;
}
QPushButton:hover {
background-color: rgba(0, 0, 0, 100);
}
QPushButton:pressed {
background-color: rgba(0, 0, 0, 100);
}
""")
self.icon_layout.addWidget(self.icon_button)
# self.shadow = QGraphicsDropShadowEffect()
# self.shadow.setBlurRadius(15)
# self.shadow.setColor(QColor('#FFFFFF'))
# self.shadow.setOffset(0, 0)
# self.icon_widget.setGraphicsEffect(self.shadow)
self.setCentralWidget(self.icon_widget)
# Настраиваем обработчики мыши для перемещения
self.icon_button.mousePressEvent = self.mouse_press_event
self.icon_button.mouseMoveEvent = self.mouse_move_event
self.icon_button.mouseReleaseEvent = self.mouse_release_event
def mouse_press_event(self, event: QMouseEvent):
"""Обработчик нажатия мыши на иконку"""
if event.button() == Qt.MouseButton.LeftButton:
self.moved = True
self.start_position = self.icon_button.mapToGlobal(event.position().toPoint())
self.dragging = True
self.drag_offset = event.position().toPoint()
self.icon_button.setStyleSheet("""
QPushButton {
background-color: rgba(0, 0, 0, 220);
border-radius: 25px;
color: white;
font-size: 22px;
font-weight: bold;
border: 3px solid #8e44ad;
}
""")
# self.shadow.setColor(QColor('#de94fd'))
event.accept()
def mouse_move_event(self, event: QMouseEvent):
"""Обработчик движения мыши для иконки"""
if self.dragging and event.buttons() & Qt.MouseButton.LeftButton:
global_pos = self.icon_button.mapToGlobal(event.position().toPoint())
new_pos = global_pos - self.drag_offset + QPoint(-10,-10)
self.move(new_pos)
event.accept()
def mouse_release_event(self, event: QMouseEvent):
"""Обработчик отпускания мыши для иконки"""
if event.button() == Qt.MouseButton.LeftButton and self.dragging:
# Решение конфликта событий mouse_press_event и clicked
end_position = self.icon_button.mapToGlobal(event.position().toPoint())
if abs((self.start_position - end_position).x()) + abs((self.start_position - end_position).y()) < 40:
self.icon_clicked.emit()
self.dragging = False
self.icon_button.setStyleSheet("""
QPushButton {
background-color: rgba(30, 30, 30, 220);
border-radius: 25px;
color: white;
font-size: 22px;
font-weight: bold;
border: 4px solid #8e44ad;
}
QPushButton:hover {
background-color: rgba(0, 0, 0, 100);
}
""")
# self.shadow.setColor(QColor('#FFFFFF'))
event.accept()
def show_icon(self):
"""Показывает иконку в левом нижнем углу"""
screen_geometry = self.screen().geometry()
x_position = screen_geometry.width() - 70
y_position = screen_geometry.height() - 120
self.move(x_position, y_position)
self.show()