from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QTextEdit, QPushButton, QDialog) from PyQt6.QtCore import Qt, pyqtSignal from PyQt6.QtGui import QClipboard, QTextCursor from PyQt6.QtWidgets import QApplication class ConsoleWindow(QDialog): console_closed = pyqtSignal() def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Консоль") self.setModal(False) self.setup_ui() self.log_messages = [] def setup_ui(self): self.setStyleSheet(""" QDialog { background-color: #1e1e1e; min-width: 700px; min-height: 500px; } QTextEdit { background-color: #252526; color: #d4d4d4; border: none; border-radius: 8px; font-family: 'JetBrains Mono', 'Consolas', 'Courier New', monospace; font-size: 13px; padding: 12px; selection-background-color: #264f78; } QPushButton { background-color: #2d2d2d; color: #d4d4d4; border: 1px solid #3e3e3e; border-radius: 6px; padding: 8px 16px; font-weight: 500; min-width: 100px; margin: 4px; } QPushButton:hover { background-color: #3e3e3e; border-color: #565656; } QPushButton:pressed { background-color: #565656; } """) layout = QVBoxLayout(self) layout.setContentsMargins(16, 16, 16, 16) layout.setSpacing(12) # Область для логов self.console_output = QTextEdit() self.console_output.setReadOnly(True) layout.addWidget(self.console_output) # Кнопки управления buttons_layout = QHBoxLayout() buttons_layout.setSpacing(8) copy_button = QPushButton("📋 Копировать") copy_button.clicked.connect(self.copy_all) clear_button = QPushButton("🗑️ Очистить") clear_button.clicked.connect(self.clear_console) buttons_layout.addWidget(copy_button) buttons_layout.addWidget(clear_button) buttons_layout.addStretch() layout.addLayout(buttons_layout) def log(self, message): """Добавить сообщение в консоль""" self.log_messages.append(message) self.console_output.append(message) # Прокрутка к последнему сообщению cursor = self.console_output.textCursor() cursor.movePosition(QTextCursor.MoveOperation.End) self.console_output.setTextCursor(cursor) def copy_all(self): """Копировать весь текст в буфер обмена""" clipboard = QApplication.clipboard() clipboard.setText(self.console_output.toPlainText()) def clear_console(self): """Очистить консоль""" self.console_output.clear() self.log_messages.clear() def closeEvent(self, event): """Обработка закрытия окна""" self.console_closed.emit() event.accept()