settings_dialog.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """Settings dialog for monitor selection."""
  2. from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel,
  3. QComboBox, QPushButton, QGroupBox)
  4. from PyQt6.QtGui import QScreen
  5. from PyQt6.QtCore import QSettings
  6. from PyQt6.QtWidgets import QApplication
  7. class SettingsDialog(QDialog):
  8. def __init__(self, parent=None):
  9. super().__init__(parent)
  10. self.settings = QSettings()
  11. self.init_ui()
  12. def init_ui(self):
  13. self.setWindowTitle("Settings")
  14. self.setMinimumWidth(400)
  15. layout = QVBoxLayout(self)
  16. # Monitor selection group
  17. monitor_group = QGroupBox("Display Settings")
  18. monitor_layout = QVBoxLayout()
  19. monitor_label = QLabel("Select Monitor for Timers:")
  20. monitor_layout.addWidget(monitor_label)
  21. self.monitor_combo = QComboBox()
  22. self.populate_monitors()
  23. monitor_layout.addWidget(self.monitor_combo)
  24. # Load saved monitor
  25. saved_monitor = self.settings.value("monitor_index", 0, type=int)
  26. if saved_monitor < self.monitor_combo.count():
  27. self.monitor_combo.setCurrentIndex(saved_monitor)
  28. monitor_group.setLayout(monitor_layout)
  29. layout.addWidget(monitor_group)
  30. # Buttons
  31. button_layout = QHBoxLayout()
  32. save_btn = QPushButton("Save")
  33. cancel_btn = QPushButton("Cancel")
  34. save_btn.clicked.connect(self.save_settings)
  35. cancel_btn.clicked.connect(self.reject)
  36. button_layout.addStretch()
  37. button_layout.addWidget(save_btn)
  38. button_layout.addWidget(cancel_btn)
  39. layout.addLayout(button_layout)
  40. def populate_monitors(self):
  41. screens = QApplication.screens()
  42. for i, screen in enumerate(screens):
  43. geometry = screen.geometry()
  44. screen_info = f"Monitor {i + 1}: {geometry.width()}x{geometry.height()} at ({geometry.x()}, {geometry.y()})"
  45. self.monitor_combo.addItem(screen_info, i)
  46. def save_settings(self):
  47. monitor_index = self.monitor_combo.currentData()
  48. self.settings.setValue("monitor_index", monitor_index)
  49. self.accept()