first commit
This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel, QProgressBar, QHBoxLayout
|
||||
from PyQt6.QtCore import Qt, pyqtSignal, QSize
|
||||
import qtawesome as qta
|
||||
|
||||
|
||||
class MainInterface(QWidget):
|
||||
"""Основной интерфейс приложения с кнопками и drop-областями"""
|
||||
button_clicked = pyqtSignal(int)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.parent = parent
|
||||
self.setup_ui()
|
||||
|
||||
def setup_ui(self):
|
||||
"""Настраивает основной интерфейс"""
|
||||
self.setObjectName("MainInterface")
|
||||
|
||||
|
||||
self.main_layout = QVBoxLayout(self)
|
||||
self.main_layout.setContentsMargins(8, 4, 8, 8)
|
||||
self.main_layout.setSpacing(1)
|
||||
|
||||
|
||||
# Прогресс-бар
|
||||
self.progress_bar = QProgressBar()
|
||||
self.progress_bar.setVisible(False)
|
||||
self.progress_bar.setStyleSheet("""
|
||||
QProgressBar {
|
||||
border-radius: 4px;
|
||||
background-color: rgba(180, 180, 180, 100);
|
||||
font-size: 1px;
|
||||
margin: 0px 3px;
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: rgba(255, 255, 255, 250);
|
||||
border-radius: 4px;
|
||||
}
|
||||
""")
|
||||
self.main_layout.addWidget(self.progress_bar)
|
||||
|
||||
# Кнопки основного интерфейса
|
||||
button_texts = [
|
||||
" Копировать жалобы", #mdi6.text-box-edit
|
||||
" Копировать анамнез", #mdi6.text-box
|
||||
" ЛОР-Статус", #mdi.ear-hearing
|
||||
" Заключение ИИ", #mdi.robot-excited
|
||||
" Новый случай" #mdi.refresh-circle
|
||||
]
|
||||
button_names = [
|
||||
"complaints",
|
||||
"history",
|
||||
"ent_status",
|
||||
"ai_conclusion",
|
||||
"refresh"
|
||||
]
|
||||
|
||||
button_default_icns = [
|
||||
"mdi6.text-box-edit",
|
||||
"mdi6.text-box",
|
||||
"mdi.ear-hearing",
|
||||
"mdi.robot-excited",
|
||||
"mdi.refresh-circle"
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
self.buttons = []
|
||||
for i, text in enumerate(button_texts):
|
||||
icn = qta.icon(button_default_icns[i], color=('#FFFFFF', 255))
|
||||
button = QPushButton(icn, text)
|
||||
button.setIconSize(QSize(25, 25))
|
||||
button.setObjectName(button_names[i])
|
||||
button.setStyleSheet("""
|
||||
QPushButton {
|
||||
color: #FFFFFF;
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
padding: 8px 8px;
|
||||
border-radius: 5px;
|
||||
font-size: 14px;
|
||||
font-weight: 650;
|
||||
margin: 0px 3px;
|
||||
text-align: left;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: rgba(0, 0, 0, 100);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: rgba(0, 0, 0, 220);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
""")
|
||||
button.clicked.connect(lambda checked, idx=i: self.button_clicked.emit(idx))
|
||||
self.buttons.append(button)
|
||||
self.main_layout.addWidget(button)
|
||||
|
||||
# Drop области
|
||||
self.setup_drop_areas()
|
||||
|
||||
# Изначально скрываем кнопки и показываем compact область
|
||||
self.hide_buttons()
|
||||
self.show_compact_drop_area()
|
||||
|
||||
def setup_drop_areas(self):
|
||||
"""Настраивает области для drag-n-drop"""
|
||||
# Основная drop область для изображений
|
||||
self.image_drop_area = QLabel("🖼️ Перетащите\nснимки сюда")
|
||||
self.image_drop_area.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
# self.image_drop_area.setMinimumHeight(120)
|
||||
self.image_drop_area.setStyleSheet("""
|
||||
QLabel {
|
||||
background-color: rgba(200, 200, 200, 100);
|
||||
border: 2px dashed rgba(180, 180, 180, 150);
|
||||
border-radius: 8px;
|
||||
padding: 0px;
|
||||
margin: 7px;
|
||||
font-size: 11px;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
}
|
||||
QLabel:hover {
|
||||
background-color: rgba(200, 200, 200, 150);
|
||||
border: 2px dashed rgb(180, 180, 180);
|
||||
}
|
||||
""")
|
||||
self.image_drop_area.hide()
|
||||
|
||||
# Drop области для текста
|
||||
self.text_drop_layout = QVBoxLayout()
|
||||
self.text_drop_layout.setSpacing(5)
|
||||
|
||||
self.complaints_drop_area = QLabel("📝 Перетащите текст\nжалоб сюда")
|
||||
self.complaints_drop_area.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
# self.complaints_drop_area.setMinimumHeight(60)
|
||||
self.complaints_drop_area.setStyleSheet("""
|
||||
QLabel {
|
||||
background-color: rgba(200, 200, 200, 100);
|
||||
border: 2px dashed rgba(180, 180, 180, 150);
|
||||
border-radius: 8px;
|
||||
padding: 0px;
|
||||
font-size: 11px;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
}
|
||||
QLabel:hover {
|
||||
background-color: rgba(200, 200, 200, 150);
|
||||
border: 2px dashed rgb(180, 180, 180);
|
||||
}
|
||||
""")
|
||||
|
||||
self.history_drop_area = QLabel("📋 Перетащите текст\nанамнеза сюда")
|
||||
self.history_drop_area.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
# self.history_drop_area.setMinimumHeight(60)
|
||||
self.history_drop_area.setStyleSheet("""
|
||||
QLabel {
|
||||
background-color: rgba(200, 200, 200, 100);
|
||||
border: 2px dashed rgba(180, 180, 180, 150);
|
||||
border-radius: 8px;
|
||||
padding: 0px;
|
||||
font-size: 11px;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
}
|
||||
QLabel:hover {
|
||||
background-color: rgba(200, 200, 200, 150);
|
||||
border: 2px dashed rgb(180, 180, 180);
|
||||
}
|
||||
""")
|
||||
|
||||
self.text_drop_layout.addWidget(self.complaints_drop_area)
|
||||
self.text_drop_layout.addWidget(self.history_drop_area)
|
||||
|
||||
self.text_drop_widget = QWidget()
|
||||
self.text_drop_widget.setLayout(self.text_drop_layout)
|
||||
self.text_drop_widget.hide()
|
||||
|
||||
def show_compact_drop_area(self):
|
||||
"""Показывает компактную drop область"""
|
||||
self.hide_all_drop_areas()
|
||||
|
||||
if hasattr(self, 'compact_drop_widget'):
|
||||
self.main_layout.removeWidget(self.compact_drop_widget)
|
||||
self.compact_drop_widget.deleteLater()
|
||||
|
||||
compact_drop_label = QLabel("📁 Перетащите снимки\nили текст сюда")
|
||||
compact_drop_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
# compact_drop_label.setMinimumHeight(80)
|
||||
compact_drop_label.setStyleSheet("""
|
||||
QLabel {
|
||||
background-color: rgba(200, 200, 200, 100);
|
||||
border: 2px dashed rgba(180, 180, 180, 150);
|
||||
border-radius: 8px;
|
||||
padding: 0px;
|
||||
margin: 7px;
|
||||
font-size: 11px;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
}
|
||||
""")
|
||||
|
||||
self.compact_drop_widget = compact_drop_label
|
||||
self.main_layout.insertWidget(0, self.compact_drop_widget)
|
||||
self.compact_drop_widget.show()
|
||||
|
||||
def show_image_drop_interface(self):
|
||||
"""Показывает интерфейс для перетаскивания изображений"""
|
||||
self.hide_all_drop_areas()
|
||||
if self.image_drop_area not in [self.main_layout.itemAt(i).widget() for i in range(self.main_layout.count())]:
|
||||
self.main_layout.insertWidget(0, self.image_drop_area)
|
||||
self.image_drop_area.show()
|
||||
|
||||
def show_text_drop_interface(self):
|
||||
"""Показывает интерфейс для перетаскивания текста"""
|
||||
self.hide_all_drop_areas()
|
||||
if self.text_drop_widget not in [self.main_layout.itemAt(i).widget() for i in range(self.main_layout.count())]:
|
||||
self.main_layout.insertWidget(0, self.text_drop_widget)
|
||||
self.text_drop_widget.show()
|
||||
|
||||
def hide_all_drop_areas(self):
|
||||
"""Скрывает все drop области"""
|
||||
self.image_drop_area.hide()
|
||||
self.text_drop_widget.hide()
|
||||
if hasattr(self, 'compact_drop_widget'):
|
||||
self.compact_drop_widget.hide()
|
||||
|
||||
def show_buttons(self):
|
||||
"""Показывает все кнопки"""
|
||||
for button in self.buttons:
|
||||
button.show()
|
||||
|
||||
def hide_buttons(self):
|
||||
"""Скрывает все кнопки"""
|
||||
for button in self.buttons:
|
||||
button.hide()
|
||||
|
||||
def set_processing_state(self, processing):
|
||||
"""Устанавливает состояние обработки"""
|
||||
self.progress_bar.setVisible(processing)
|
||||
if processing:
|
||||
self.progress_bar.setRange(0, 0)
|
||||
else:
|
||||
self.progress_bar.setRange(0, 100)
|
||||
|
||||
def set_buttons_enabled(self, enabled):
|
||||
"""Включает/выключает кнопки"""
|
||||
for button in self.buttons:
|
||||
if button.objectName() != "🔄 Новый случай":
|
||||
button.setEnabled(enabled)
|
||||
Reference in New Issue
Block a user