From 15985f70bbac8b37886f48f091fe9e32168df913 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 7 Jul 2025 11:35:53 +0200 Subject: [PATCH] Refactor MainWindow layout for improved usability and compactness --- main.py | 120 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 90 insertions(+), 30 deletions(-) diff --git a/main.py b/main.py index 01fcfb2..8a42fdd 100644 --- a/main.py +++ b/main.py @@ -254,7 +254,11 @@ class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Scenario Image Automation') - self.setGeometry(100, 100, 1000, 700) + # Make window smaller and more compact + min_width = 480 + min_height = 320 + self.setMinimumSize(min_width, min_height) + self.setGeometry(100, 100, min_width, 400) self.running = False self.hotkey = '++s' self.listener = None @@ -265,50 +269,106 @@ class MainWindow(QtWidgets.QMainWindow): self.load_scenarios() def init_ui(self): - # Scenario selection + # Set compact font and style + font = QtGui.QFont() + font.setPointSize(9) + self.setFont(font) + style = """ + QPushButton, QComboBox, QListWidget, QLabel { + font-size: 9pt; + min-height: 20px; + padding: 2px 6px; + } + QComboBox { min-width: 90px; } + QPushButton { min-width: 70px; } + QListWidget { min-width: 200px; min-height: 120px; } + """ + self.setStyleSheet(style) + + # Scenario group (QGroupBox with title 'Scenario') + scenario_group_box = QtWidgets.QGroupBox('Scenario') + scenario_group_layout = QtWidgets.QVBoxLayout() self.combo = QtWidgets.QComboBox() + self.combo.setMinimumWidth(90) self.combo.currentIndexChanged.connect(self.select_scenario) - self.btn_new = QtWidgets.QPushButton('New Scenario') + scenario_group_layout.addWidget(self.combo) + # Scenario actions + self.btn_new = QtWidgets.QPushButton('New') + self.btn_new.setToolTip('Create new scenario') self.btn_new.clicked.connect(self.create_scenario) self.btn_import = QtWidgets.QPushButton('Import') + self.btn_import.setToolTip('Import scenario') self.btn_import.clicked.connect(self.import_scenario) self.btn_export = QtWidgets.QPushButton('Export') + self.btn_export.setToolTip('Export scenario') self.btn_export.clicked.connect(self.export_scenario) - # Steps list - self.steps_list = QtWidgets.QListWidget() - self.steps_list.currentRowChanged.connect(self.select_step) - self.btn_add_step = QtWidgets.QPushButton('Add Step') - self.btn_add_step.clicked.connect(self.add_step) - self.btn_edit_step = QtWidgets.QPushButton('Edit Step') - self.btn_edit_step.clicked.connect(self.edit_step) - self.btn_del_step = QtWidgets.QPushButton('Delete Step') - self.btn_del_step.clicked.connect(self.delete_step) - self.btn_rename_scenario = QtWidgets.QPushButton("Rename Scenario") + self.btn_rename_scenario = QtWidgets.QPushButton("Rename") + self.btn_rename_scenario.setToolTip('Rename scenario') self.btn_rename_scenario.clicked.connect(self.rename_scenario) - self.btn_rename_step = QtWidgets.QPushButton("Rename Step") + scenario_btn_group_layout = QtWidgets.QHBoxLayout() + scenario_btn_group_layout.setSpacing(4) + scenario_btn_group_layout.setContentsMargins(4, 4, 4, 4) + scenario_btn_group_layout.addWidget(self.btn_new) + scenario_btn_group_layout.addWidget(self.btn_import) + scenario_btn_group_layout.addWidget(self.btn_export) + scenario_btn_group_layout.addWidget(self.btn_rename_scenario) + scenario_group_layout.addLayout(scenario_btn_group_layout) + scenario_group_box.setLayout(scenario_group_layout) + + # Steps group (QGroupBox with title 'Steps') + steps_group_box = QtWidgets.QGroupBox('Steps') + steps_group_layout = QtWidgets.QVBoxLayout() + self.steps_list = QtWidgets.QListWidget() + self.steps_list.setMinimumHeight(120) + self.steps_list.currentRowChanged.connect(self.select_step) + steps_group_layout.addWidget(self.steps_list) + # Step actions + self.btn_add_step = QtWidgets.QPushButton('Add') + self.btn_add_step.setToolTip('Add step') + self.btn_add_step.clicked.connect(self.add_step) + self.btn_edit_step = QtWidgets.QPushButton('Edit') + self.btn_edit_step.setToolTip('Edit step') + self.btn_edit_step.clicked.connect(self.edit_step) + self.btn_del_step = QtWidgets.QPushButton('Delete') + self.btn_del_step.setToolTip('Delete step') + self.btn_del_step.clicked.connect(self.delete_step) + self.btn_rename_step = QtWidgets.QPushButton("Rename") + self.btn_rename_step.setToolTip('Rename step') self.btn_rename_step.clicked.connect(self.rename_step) + step_btn_group_layout = QtWidgets.QHBoxLayout() + step_btn_group_layout.setSpacing(4) + step_btn_group_layout.setContentsMargins(4, 4, 4, 4) + step_btn_group_layout.addWidget(self.btn_add_step) + step_btn_group_layout.addWidget(self.btn_edit_step) + step_btn_group_layout.addWidget(self.btn_del_step) + step_btn_group_layout.addWidget(self.btn_rename_step) + steps_group_layout.addLayout(step_btn_group_layout) + steps_group_box.setLayout(steps_group_layout) + # Start/Stop Combined self.btn_start_stop = QtWidgets.QPushButton('Start') + self.btn_start_stop.setMinimumWidth(80) self.btn_start_stop.clicked.connect(self.toggle_automation) + # State label self.state_label = QtWidgets.QLabel('State: Paused') - self.state_label.setStyleSheet('font-weight: bold; font-size: 16px; color: #0055aa;') - # Layout + self.state_label.setStyleSheet('font-weight: bold; font-size: 11pt; color: #0055aa;') + + # Main layout layout = QtWidgets.QGridLayout() - layout.addWidget(QtWidgets.QLabel('Scenario:'), 0, 0) - layout.addWidget(self.combo, 0, 1) - layout.addWidget(self.btn_new, 0, 2) - layout.addWidget(self.btn_import, 0, 3) - layout.addWidget(self.btn_export, 0, 4) - layout.addWidget(self.btn_rename_scenario, 0, 5) - layout.addWidget(QtWidgets.QLabel('Steps:'), 1, 0) - layout.addWidget(self.steps_list, 1, 1, 4, 4) - layout.addWidget(self.btn_add_step, 5, 1) - layout.addWidget(self.btn_edit_step, 5, 2) - layout.addWidget(self.btn_del_step, 5, 3) - layout.addWidget(self.btn_rename_step, 5, 4) - layout.addWidget(self.btn_start_stop, 6, 1) - layout.addWidget(self.state_label, 6, 2, 1, 3) + layout.setHorizontalSpacing(6) + layout.setVerticalSpacing(4) + layout.setContentsMargins(8, 8, 8, 8) + + # Scenario and Steps groups in layout + layout.addWidget(scenario_group_box, 0, 0, 1, 5) + layout.addWidget(steps_group_box, 1, 0, 3, 5) + + # Start/State row + layout.addWidget(self.btn_start_stop, 5, 1) + layout.addWidget(self.state_label, 5, 2, 1, 2) + + # Set central widget central = QtWidgets.QWidget() central.setLayout(layout) self.setCentralWidget(central)