Files
art/modules/console_window.py

100 lines
3.4 KiB
Python

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