Files
training.python.beginner/training/demos/10-graphical-ui/data-conversion-demo/source/interface/windowmanager.py
2025-07-04 19:26:39 +02:00

82 lines
2.6 KiB
Python

from typing import Union
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QFileDialog, QWidget, QListWidgetItem
from interface.mainwindow import MainWindow
from loaders import CSVManager
class WindowManager:
"""
Class used to manage the Qt window and its associated data.
Attributes:
_window: Private, contains the main window.
_csv_manager: Private, holds a CSV manager.
"""
_window: Union[QWidget, MainWindow] = None # Qt window managed by this class
_csv_manager: CSVManager = None # Object used to manage CSV data
def __init__(self):
"""
Initialize our window manager.
"""
loader = QUiLoader()
self._window = loader.load("files/designer/demo-dialog.ui")
# Once the window is loaded, connect actions to code
self.setup_actions()
def setup_actions(self):
"""Connect actions of controls to methods."""
self._window.file_button.clicked.connect(self.on_file_select)
self._window.button_csv_export.clicked.connect(self.on_export_csv)
def on_file_select(self):
"""
Action when the file button is clicked.
Shows a file select dialog to pick a CSV
and loads the CSV file in the CSVManager instance of the object.
"""
filter_text = "CSV File (*.csv)"
selection: tuple = QFileDialog.getOpenFileName(self._window, "CSV File", "", filter_text)
path: str = selection[0]
if path:
self._csv_manager = CSVManager(path)
self._window.button_csv_export.setEnabled(True)
# Empty list items and enable the list widget
self._window.list_widget.clear()
self._window.list_widget.setEnabled(True)
# Add rows in the list widget containing CSV rows
for row in self._csv_manager.data:
item = QListWidgetItem(";".join(row))
self._window.list_widget.addItem(item)
def on_export_csv(self):
"""
Action when the export to CSV button is clicked.
Shows a file select dialog to select a file destination.
The output file is then saved to the selected path.
"""
filter_text = "Text File (*.txt)"
selection: tuple = QFileDialog.getSaveFileName(self._window, "Text File", "", filter_text)
path: str = selection[0]
if path:
self._csv_manager.export_text(selection[0])
def show(self):
"""
Public method to show our window.
The window is loaded automatically at instanciation
in the `__init__` method.
"""
self._window.show()