Gabryelf / Gabryelf/Tools-Progs

Issue #5: Инструменты рисования (маркер) на экране

Open
#5 0 comments 0 reactions 1 assignee Claimed by @Gabryelf View on GitHub
enhancement
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

# ✏️ Инструмент рисования на экране

## Описание:

Реализовать инструмент, позволяющий пользователю рисовать/обводить элементы на экране во время записи, как в OBS.

## Задачи
- [x] Создать прозрачное окно для рисования поверх экрана
- [x] Реализовать рисование мышью с выбором цвета и толщины
- [x] Добавить поддержку режимов: рисование, стирание, указатель
- [x] Создать панель инструментов с выбором цвета и размера кисти
- [x] Реализовать горячие клавиши для переключения режимов
- [x] Сохранять рисунки как overlay на видео
- [x] Добавить возможность очистки рисунков

# Технические детали

## Основные классы:

```python
class DrawingOverlay(QWidget):
"""Прозрачное окно для рисования поверх экрана"""

def __init__(self):
super().__init__()
self.setWindowFlags(
Qt.FramelessWindowHint |
Qt.WindowStaysOnTopHint |
Qt.Tool
)
self.setAttribute(Qt.WA_TranslucentBackground)
self.setGeometry(0, 0, screen_width, screen_height)

self.drawing = False
self.last_point = None
self.pen_color = Qt.red
self.pen_width = 3
self.mode = 'draw' # draw, erase, pointer
self.image = QPixmap(screen_width, screen_height)
self.image.fill(Qt.transparent)

def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(0, 0, self.image)

def mousePressEvent(self, event):
self.drawing = True
self.last_point = event.pos()

def mouseMoveEvent(self, event):
if self.drawing:
painter = QPainter(self.image)
painter.setPen(QPen(self.pen_color, self.pen_width))
painter.drawLine(self.last_point, event.pos())
self.last_point = event.pos()
self.update()
```

## Панель инструментов:

```python
class DrawingToolbar(QToolBar):
"""Панель инструментов для рисования"""

def __init__(self):
super().__init__("Инструменты рисования")

# Выбор цвета
self.color_btn = QPushButton()
self.color_btn.setStyleSheet("background-color: red;")
self.color_btn.clicked.connect(self.choose_color)

# Размер кисти
self.size_slider = QSlider(Qt.Horizontal)
self.size_slider.setRange(1, 20)
self.size_slider.setValue(3)

# Режимы
self.draw_btn = QPushButton("✏️")
self.erase_btn = QPushButton("🧹")
self.clear_btn = QPushButton("🗑️")
```
## Интеграция с записью:

```python
class ScreenRecorder:
def __init__(self):
self.drawing_overlay = None
self.overlay_enabled = False

def enable_overlay(self):
self.overlay_enabled = True
self.drawing_overlay = DrawingOverlay()
self.drawing_overlay.show()

def capture_frame_with_overlay(self):
screenshot = pyautogui.screenshot()
if self.overlay_enabled:
# Накладываем рисунок на скриншот
overlay_pixmap = self.drawing_overlay.image
# Объединяем изображения
combined = self.merge_images(screenshot, overlay_pixmap)
return combined
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.