simple preferences window + table columns stretch with resize

This commit is contained in:
billypom on debian 2024-02-27 18:31:59 -05:00
parent 20636cd081
commit dd558bd498
6 changed files with 79 additions and 15 deletions

2
DBA.py
View File

@ -6,7 +6,7 @@ class DBAccess:
config = ConfigParser() config = ConfigParser()
config.read('config.ini') config.read('config.ini')
if db_name is None: if db_name is None:
db_name = config.get('db', 'library') db_name = config.get('db', 'database')
self._conn = sqlite3.connect(db_name) self._conn = sqlite3.connect(db_name)
self._cursor = self._conn.cursor() self._cursor = self._conn.cursor()

View File

@ -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()

View File

@ -1,2 +1,3 @@
from .MusicTable import MusicTable from .MusicTable import MusicTable
from .AudioVisualizer import AudioVisualizer from .AudioVisualizer import AudioVisualizer
from .PreferencesWindow import PreferencesWindow

11
main.py
View File

@ -1,6 +1,6 @@
import DBA import DBA
from ui import Ui_MainWindow from ui import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow, QApplication, QGraphicsScene from PyQt5.QtWidgets import QMainWindow, QApplication, QGraphicsScene, QHeaderView
import qdarktheme import qdarktheme
from PyQt5.QtCore import QUrl, QTimer, QEvent, Qt, QRect from PyQt5.QtCore import QUrl, QTimer, QEvent, Qt, QRect
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QAudioProbe 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 scan_for_music
from utils import initialize_library_database from utils import initialize_library_database
from components import AudioVisualizer from components import AudioVisualizer
from components import PreferencesWindow
from pyqtgraph import mkBrush from pyqtgraph import mkBrush
import configparser import configparser
@ -82,6 +83,10 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
table_view_column_widths = str(self.config['table']['column_widths']).split(',') table_view_column_widths = str(self.config['table']['column_widths']).split(',')
for i in range(self.tableView.model.columnCount()): for i in range(self.tableView.model.columnCount()):
self.tableView.setColumnWidth(i, int(table_view_column_widths[i])) 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): def eventFilter(self, source, event):
"""Handles events""" """Handles events"""
@ -212,8 +217,8 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
print('next') print('next')
def actionPreferencesClicked(self): def actionPreferencesClicked(self):
print('preferences') preferences_window = PreferencesWindow(self.config)
preferences_window.exec_() # Display the preferences window modally
def scan_libraries(self): def scan_libraries(self):
scan_for_music() scan_for_music()
self.tableView.fetch_library() self.tableView.fetch_library()

8
ui.py
View File

@ -23,13 +23,15 @@ class Ui_MainWindow(object):
self.hLayoutHead = QtWidgets.QHBoxLayout() self.hLayoutHead = QtWidgets.QHBoxLayout()
self.hLayoutHead.setObjectName("hLayoutHead") self.hLayoutHead.setObjectName("hLayoutHead")
self.vlayoutAlbumArt = QtWidgets.QVBoxLayout() self.vlayoutAlbumArt = QtWidgets.QVBoxLayout()
self.vlayoutAlbumArt.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.vlayoutAlbumArt.setObjectName("vlayoutAlbumArt") self.vlayoutAlbumArt.setObjectName("vlayoutAlbumArt")
self.albumGraphicsView = QtWidgets.QGraphicsView(self.centralwidget) 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.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.albumGraphicsView.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.albumGraphicsView.sizePolicy().hasHeightForWidth())
self.albumGraphicsView.setSizePolicy(sizePolicy) self.albumGraphicsView.setSizePolicy(sizePolicy)
self.albumGraphicsView.setMinimumSize(QtCore.QSize(200, 200))
self.albumGraphicsView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.albumGraphicsView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.albumGraphicsView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.albumGraphicsView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.albumGraphicsView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) self.albumGraphicsView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
@ -86,7 +88,7 @@ class Ui_MainWindow(object):
self.PlotWidget.setObjectName("PlotWidget") self.PlotWidget.setObjectName("PlotWidget")
self.vLayoutPlaybackVisuals.addWidget(self.PlotWidget) self.vLayoutPlaybackVisuals.addWidget(self.PlotWidget)
self.hLayoutHead.addLayout(self.vLayoutPlaybackVisuals) self.hLayoutHead.addLayout(self.vLayoutPlaybackVisuals)
self.hLayoutHead.setStretch(0, 2) self.hLayoutHead.setStretch(0, 1)
self.hLayoutHead.setStretch(1, 4) self.hLayoutHead.setStretch(1, 4)
self.hLayoutHead.setStretch(2, 6) self.hLayoutHead.setStretch(2, 6)
self.verticalLayout_3.addLayout(self.hLayoutHead) self.verticalLayout_3.addLayout(self.hLayoutHead)
@ -94,7 +96,7 @@ class Ui_MainWindow(object):
self.hLayoutMusicTable.setObjectName("hLayoutMusicTable") self.hLayoutMusicTable.setObjectName("hLayoutMusicTable")
self.tableView = MusicTable(self.centralwidget) self.tableView = MusicTable(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(1) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1) sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.tableView.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.tableView.sizePolicy().hasHeightForWidth())
self.tableView.setSizePolicy(sizePolicy) self.tableView.setSizePolicy(sizePolicy)

15
ui.ui
View File

@ -19,17 +19,26 @@
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_3" stretch="3,8,1,1"> <layout class="QVBoxLayout" name="verticalLayout_3" stretch="3,8,1,1">
<item> <item>
<layout class="QHBoxLayout" name="hLayoutHead" stretch="2,4,6"> <layout class="QHBoxLayout" name="hLayoutHead" stretch="1,4,6">
<item> <item>
<layout class="QVBoxLayout" name="vlayoutAlbumArt"> <layout class="QVBoxLayout" name="vlayoutAlbumArt">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item> <item>
<widget class="QGraphicsView" name="albumGraphicsView"> <widget class="QGraphicsView" name="albumGraphicsView">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum"> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
<property name="verticalScrollBarPolicy"> <property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum> <enum>Qt::ScrollBarAlwaysOff</enum>
</property> </property>
@ -141,7 +150,7 @@
<widget class="MusicTable" name="tableView"> <widget class="MusicTable" name="tableView">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum"> <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>1</horstretch> <horstretch>0</horstretch>
<verstretch>1</verstretch> <verstretch>1</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>