first commit
This commit is contained in:
+124
@@ -0,0 +1,124 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user