removed qt designer MusicTable widget properties, set them manually in widget constructor
This commit is contained in:
parent
9b5e635a6e
commit
696d0d2fb1
@ -17,6 +17,11 @@ install system packages
|
||||
sudo apt install ffmpeg python3-pyqt5 virtualenv
|
||||
```
|
||||
|
||||
additional packages needed for wsl
|
||||
```bash
|
||||
sudo apt install gstreamer1.0-plugins-good
|
||||
```
|
||||
|
||||
create environment
|
||||
```bash
|
||||
cd musicpom
|
||||
@ -51,9 +56,9 @@ config.ini db/
|
||||
- ~~editable lyrics window~~
|
||||
- ~~batch metadata changer (red highlight fields that have differing info)~~
|
||||
- ~~playlists~~
|
||||
- ~~delete songs from library (del key || right-click delete)~~
|
||||
- playlist autoexporting
|
||||
- fix table headers being resized and going out window bounds
|
||||
- delete songs from library (del key || right-click delete)
|
||||
- .wav, .ogg, .flac convertor
|
||||
- FIXME: dbaccess is instantiated for every track being reorganized
|
||||
- automatic "radio" based on artist or genre
|
||||
|
||||
@ -64,6 +64,7 @@ class MusicTable(QTableView):
|
||||
def __init__(self, parent=None, application_window=None):
|
||||
super().__init__(parent)
|
||||
self.application_window = application_window
|
||||
# needed a separate model to do certain actions
|
||||
self.model2: QStandardItemModel = QStandardItemModel()
|
||||
self.setModel(self.model2)
|
||||
|
||||
@ -108,11 +109,25 @@ class MusicTable(QTableView):
|
||||
self.songChanged = None
|
||||
self.selected_song_filepath = ""
|
||||
self.current_song_filepath = ""
|
||||
self.current_item = None # track where cursor was last
|
||||
|
||||
# Properties
|
||||
self.setSortingEnabled(False)
|
||||
self.setAcceptDrops(True)
|
||||
self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
||||
self.setEditTriggers(QAbstractItemView.EditTrigger.EditKeyPressed)
|
||||
self.setAlternatingRowColors(True)
|
||||
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||
self.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||
self.setSortingEnabled(True)
|
||||
self.horizontal_header: QHeaderView = self.horizontalHeader()
|
||||
assert self.horizontal_header is not None
|
||||
assert self.horizontal_header is not None # i hate look at linting errors
|
||||
self.horizontal_header.setStretchLastSection(True)
|
||||
self.horizontal_header.setSectionResizeMode(QHeaderView.Interactive)
|
||||
self.setSortingEnabled(False)
|
||||
self.vertical_header: QHeaderView = self.verticalHeader()
|
||||
assert self.vertical_header is not None
|
||||
self.vertical_header.setVisible(False)
|
||||
|
||||
# CONNECTIONS
|
||||
self.clicked.connect(self.set_selected_song_filepath)
|
||||
self.doubleClicked.connect(self.set_current_song_filepath)
|
||||
@ -170,15 +185,17 @@ class MusicTable(QTableView):
|
||||
elif order == 2:
|
||||
sort_orders.append(Qt.SortOrder.DescendingOrder)
|
||||
|
||||
# NOTE:
|
||||
# this is bad because sortByColumn calls a SELECT statement,
|
||||
# and will do this for as many sorts that are needed
|
||||
# maybe not a huge deal for a small music application...
|
||||
# `len(config_sort_orders)` number of SELECTs
|
||||
# QTableView sorts need to happen in reverse order
|
||||
# The primary sort column is the last column sorted.
|
||||
for i in reversed(range(len(sort_orders))):
|
||||
if sort_orders[i] is not None:
|
||||
debug(f"sorting column {i} by {sort_orders[i]}")
|
||||
self.sortByColumn(i, sort_orders[i])
|
||||
# WARNING:
|
||||
# sortByColumn calls a SELECT statement,
|
||||
# and will do this for as many sorts that are needed
|
||||
# maybe not a huge deal for a small music application...
|
||||
# `len(config_sort_orders)` number of SELECTs
|
||||
|
||||
self.connect_data_changed()
|
||||
self.connect_layout_changed()
|
||||
@ -548,7 +565,8 @@ class MusicTable(QTableView):
|
||||
self.playPauseSignal.emit()
|
||||
|
||||
def add_files(self, files: list[str]) -> None:
|
||||
"""Spawns a worker thread - adds a list of filepaths to the library
|
||||
"""
|
||||
Spawns a worker thread - adds a list of filepaths to the library
|
||||
- Drag & Drop song(s) on tableView
|
||||
- File > Open > List of song(s)
|
||||
"""
|
||||
|
||||
2
main.py
2
main.py
@ -437,7 +437,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
|
||||
def speed_changed(self, rate: int) -> None:
|
||||
"""Handles playback speed changes"""
|
||||
self.player.setPlaybackRate(rate / 50)
|
||||
self.speedLabel.setText(str(round(rate / 50, 2)))
|
||||
self.speedLabel.setText("{:.2f}".format(rate / 50))
|
||||
|
||||
def on_play_clicked(self) -> None:
|
||||
"""Updates the Play & Pause buttons when clicked"""
|
||||
|
||||
14
ui.py
14
ui.py
@ -2,7 +2,7 @@
|
||||
|
||||
# Form implementation generated from reading ui file 'ui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.10
|
||||
# Created by: PyQt5 UI code generator 5.15.11
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
@ -143,16 +143,7 @@ class Ui_MainWindow(object):
|
||||
self.playlistTreeView.setObjectName("playlistTreeView")
|
||||
self.hLayoutMusicTable.addWidget(self.playlistTreeView)
|
||||
self.tableView = MusicTable(self.centralwidget)
|
||||
self.tableView.setMaximumSize(QtCore.QSize(16777215, 16777215))
|
||||
self.tableView.setAcceptDrops(True)
|
||||
self.tableView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||
self.tableView.setEditTriggers(QtWidgets.QAbstractItemView.AnyKeyPressed|QtWidgets.QAbstractItemView.EditKeyPressed)
|
||||
self.tableView.setAlternatingRowColors(True)
|
||||
self.tableView.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.tableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
||||
self.tableView.setSortingEnabled(True)
|
||||
self.tableView.setObjectName("tableView")
|
||||
self.tableView.verticalHeader().setVisible(False)
|
||||
self.hLayoutMusicTable.addWidget(self.tableView)
|
||||
self.hLayoutMusicTable.setStretch(0, 2)
|
||||
self.hLayoutMusicTable.setStretch(1, 10)
|
||||
@ -217,7 +208,7 @@ class Ui_MainWindow(object):
|
||||
self.verticalLayout_3.setStretch(0, 20)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 41))
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 21))
|
||||
self.menubar.setObjectName("menubar")
|
||||
self.menuFile = QtWidgets.QMenu(self.menubar)
|
||||
self.menuFile.setObjectName("menuFile")
|
||||
@ -267,7 +258,6 @@ class Ui_MainWindow(object):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||
self.artistLabel.setText(_translate("MainWindow", "artist"))
|
||||
self.titleLabel.setText(_translate("MainWindow", "song title"))
|
||||
self.albumLabel.setText(_translate("MainWindow", "album"))
|
||||
self.startTimeLabel.setText(_translate("MainWindow", "00:00"))
|
||||
self.slashLabel.setText(_translate("MainWindow", "/"))
|
||||
|
||||
38
ui.ui
38
ui.ui
@ -101,9 +101,6 @@
|
||||
<pointsize>18</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>song title</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -240,38 +237,7 @@
|
||||
<widget class="PlaylistsPane" name="playlistTreeView"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="MusicTable" name="tableView">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="acceptDrops">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::EditKeyPressed</set>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="MusicTable" name="tableView"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
@ -407,7 +373,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1152</width>
|
||||
<height>41</height>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user