From dd558bd498e720f14b266caaf1804539ac1d22be Mon Sep 17 00:00:00 2001 From: billypom on debian Date: Tue, 27 Feb 2024 18:31:59 -0500 Subject: [PATCH] simple preferences window + table columns stretch with resize --- DBA.py | 4 +-- components/PreferencesWindow.py | 47 +++++++++++++++++++++++++++++++++ components/__init__.py | 3 ++- main.py | 17 +++++++----- ui.py | 8 +++--- ui.ui | 15 ++++++++--- 6 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 components/PreferencesWindow.py diff --git a/DBA.py b/DBA.py index 46751e3..048a175 100644 --- a/DBA.py +++ b/DBA.py @@ -6,7 +6,7 @@ class DBAccess: config = ConfigParser() config.read('config.ini') if db_name is None: - db_name = config.get('db', 'library') + db_name = config.get('db', 'database') self._conn = sqlite3.connect(db_name) self._cursor = self._conn.cursor() @@ -46,4 +46,4 @@ class DBAccess: def query(self, sql, params): self.cursor.execute(sql, params or ()) - return self.fetchall() \ No newline at end of file + return self.fetchall() diff --git a/components/PreferencesWindow.py b/components/PreferencesWindow.py new file mode 100644 index 0000000..eb2afd3 --- /dev/null +++ b/components/PreferencesWindow.py @@ -0,0 +1,47 @@ +from PyQt5.QtWidgets import QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton +from PyQt5.QtGui import QFont +import configparser + +class PreferencesWindow(QDialog): + def __init__(self, config): + super(PreferencesWindow, self).__init__() + self.setWindowTitle('Preferences') + self.config = config + layout = QVBoxLayout() + + label = QLabel('Preferences Window') + layout.addWidget(label) + + # Labels & input fields + self.input_fields = {} + for category in self.config.sections(): + category_label = QLabel(f'{category}') + category_label.setFont(QFont('', weight=QFont.Bold)) # bold category + category_label.setStyleSheet("text-transform:uppercase;") # uppercase category + layout.addWidget(category_label) + for key in self.config[category]: + label = QLabel(key) + input_field = QLineEdit(self.config[category][key]) + layout.addWidget(label) + layout.addWidget(input_field) + self.input_fields[key] = input_field + + # Save button + save_button = QPushButton('Save') + save_button.clicked.connect(self.save_preferences) + layout.addWidget(save_button) + self.setLayout(layout) + + def save_preferences(self): + # Upcate the config fields + for key in self.input_fields: + for category in self.config.sections(): + if key in self.config[category]: + self.config[category][key] = self.input_fields[key].text() + + # Write the config file + with open('config.ini', 'w') as configfile: + self.config.write(configfile) + + self.close() + diff --git a/components/__init__.py b/components/__init__.py index dbbdfbf..abe2515 100644 --- a/components/__init__.py +++ b/components/__init__.py @@ -1,2 +1,3 @@ from .MusicTable import MusicTable -from .AudioVisualizer import AudioVisualizer \ No newline at end of file +from .AudioVisualizer import AudioVisualizer +from .PreferencesWindow import PreferencesWindow diff --git a/main.py b/main.py index 5eeeaed..b07d2e0 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ import DBA from ui import Ui_MainWindow -from PyQt5.QtWidgets import QMainWindow, QApplication, QGraphicsScene +from PyQt5.QtWidgets import QMainWindow, QApplication, QGraphicsScene, QHeaderView import qdarktheme from PyQt5.QtCore import QUrl, QTimer, QEvent, Qt, QRect from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QAudioProbe @@ -8,6 +8,7 @@ from PyQt5.QtGui import QPixmap from utils import scan_for_music from utils import initialize_library_database from components import AudioVisualizer +from components import PreferencesWindow from pyqtgraph import mkBrush import configparser @@ -78,11 +79,15 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): self.tableView.doubleClicked.connect(self.play_audio_file) # Double click to play song self.tableView.viewport().installEventFilter(self) # for drag & drop functionality # self.tableView.model.layoutChanged() - ### set column widths + ### set column widths table_view_column_widths = str(self.config['table']['column_widths']).split(',') for i in range(self.tableView.model.columnCount()): self.tableView.setColumnWidth(i, int(table_view_column_widths[i])) - + # dont extend last column past table view border + self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.tableView.horizontalHeader().setStretchLastSection(False) + + def eventFilter(self, source, event): """Handles events""" # tableView (drag & drop) @@ -212,8 +217,8 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): print('next') def actionPreferencesClicked(self): - print('preferences') - + preferences_window = PreferencesWindow(self.config) + preferences_window.exec_() # Display the preferences window modally def scan_libraries(self): scan_for_music() self.tableView.fetch_library() @@ -236,4 +241,4 @@ if __name__ == "__main__": qdarktheme.setup_theme() ui = ApplicationWindow(app) ui.show() - sys.exit(app.exec_()) \ No newline at end of file + sys.exit(app.exec_()) diff --git a/ui.py b/ui.py index 97bb15a..5f73ad7 100644 --- a/ui.py +++ b/ui.py @@ -23,13 +23,15 @@ class Ui_MainWindow(object): self.hLayoutHead = QtWidgets.QHBoxLayout() self.hLayoutHead.setObjectName("hLayoutHead") self.vlayoutAlbumArt = QtWidgets.QVBoxLayout() + self.vlayoutAlbumArt.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) self.vlayoutAlbumArt.setObjectName("vlayoutAlbumArt") self.albumGraphicsView = QtWidgets.QGraphicsView(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.albumGraphicsView.sizePolicy().hasHeightForWidth()) self.albumGraphicsView.setSizePolicy(sizePolicy) + self.albumGraphicsView.setMinimumSize(QtCore.QSize(200, 200)) self.albumGraphicsView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.albumGraphicsView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.albumGraphicsView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) @@ -86,7 +88,7 @@ class Ui_MainWindow(object): self.PlotWidget.setObjectName("PlotWidget") self.vLayoutPlaybackVisuals.addWidget(self.PlotWidget) self.hLayoutHead.addLayout(self.vLayoutPlaybackVisuals) - self.hLayoutHead.setStretch(0, 2) + self.hLayoutHead.setStretch(0, 1) self.hLayoutHead.setStretch(1, 4) self.hLayoutHead.setStretch(2, 6) self.verticalLayout_3.addLayout(self.hLayoutHead) @@ -94,7 +96,7 @@ class Ui_MainWindow(object): self.hLayoutMusicTable.setObjectName("hLayoutMusicTable") self.tableView = MusicTable(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) - sizePolicy.setHorizontalStretch(1) + sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.tableView.sizePolicy().hasHeightForWidth()) self.tableView.setSizePolicy(sizePolicy) diff --git a/ui.ui b/ui.ui index 96146c1..7c887ed 100644 --- a/ui.ui +++ b/ui.ui @@ -19,17 +19,26 @@ - + + + QLayout::SetFixedSize + - + 0 0 + + + 200 + 200 + + Qt::ScrollBarAlwaysOff @@ -141,7 +150,7 @@ - 1 + 0 1