From 0e3e30391b02e3726221ae97e379ac7774e6dfba Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sun, 15 Aug 2021 16:03:48 +0100 Subject: [PATCH] Don't grow window when track title too long Use an elided text box, set wrapping and max height for label. Fixes #26 --- app/musicmuster.py | 17 +++++++++++++++++ app/ui/main_window.ui | 30 +++++++++++++++++++++++++++++- app/ui/main_window_ui.py | 8 +++++++- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 8f4092c..35ecbf9 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -10,11 +10,13 @@ from datetime import datetime, timedelta from log import DEBUG, EXCEPTION from PyQt5.QtCore import Qt, QTimer +from PyQt5.QtGui import QFontMetrics, QPainter from PyQt5.QtWidgets import ( QApplication, QDialog, QFileDialog, QInputDialog, + QLabel, QListWidgetItem, QMainWindow, ) @@ -32,6 +34,21 @@ from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist from ui.main_window_ui import Ui_MainWindow +class ElideLabel(QLabel): + """ + From https://stackoverflow.com/questions/11446478/ + pyside-pyqt-truncate-text-in-qlabel-based-on-minimumsize + """ + + def paintEvent(self, event): + painter = QPainter(self) + + metrics = QFontMetrics(self.font()) + elided = metrics.elidedText(self.text(), Qt.ElideRight, self.width()) + + painter.drawText(self.rect(), self.alignment(), elided) + + class Window(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super().__init__(parent) diff --git a/app/ui/main_window.ui b/app/ui/main_window.ui index bcf5419..21d7660 100644 --- a/app/ui/main_window.ui +++ b/app/ui/main_window.ui @@ -149,6 +149,9 @@ border: 1px solid rgb(85, 87, 83); + + true + @@ -166,10 +169,25 @@ border: 1px solid rgb(85, 87, 83); + + true + - + + + + 0 + 39 + + + + + 16777215 + 39 + + Sans @@ -183,6 +201,9 @@ border: 1px solid rgb(85, 87, 83); + + true + @@ -984,6 +1005,13 @@ border: 1px solid rgb(85, 87, 83); + + + ElideLabel + QLabel +
musicmuster
+
+
diff --git a/app/ui/main_window_ui.py b/app/ui/main_window_ui.py index 2d18440..0ae799d 100644 --- a/app/ui/main_window_ui.py +++ b/app/ui/main_window_ui.py @@ -85,6 +85,7 @@ class Ui_MainWindow(object): self.hdrPreviousTrack.setStyleSheet("background-color: #f8d7da;\n" "border: 1px solid rgb(85, 87, 83);") self.hdrPreviousTrack.setText("") + self.hdrPreviousTrack.setWordWrap(True) self.hdrPreviousTrack.setObjectName("hdrPreviousTrack") self.verticalLayout.addWidget(self.hdrPreviousTrack) self.hdrCurrentTrack = QtWidgets.QLabel(self.centralwidget) @@ -95,9 +96,12 @@ class Ui_MainWindow(object): self.hdrCurrentTrack.setStyleSheet("background-color: #d4edda;\n" "border: 1px solid rgb(85, 87, 83);") self.hdrCurrentTrack.setText("") + self.hdrCurrentTrack.setWordWrap(True) self.hdrCurrentTrack.setObjectName("hdrCurrentTrack") self.verticalLayout.addWidget(self.hdrCurrentTrack) - self.hdrNextTrack = QtWidgets.QLabel(self.centralwidget) + self.hdrNextTrack = ElideLabel(self.centralwidget) + self.hdrNextTrack.setMinimumSize(QtCore.QSize(0, 39)) + self.hdrNextTrack.setMaximumSize(QtCore.QSize(16777215, 39)) font = QtGui.QFont() font.setFamily("Sans") font.setPointSize(20) @@ -105,6 +109,7 @@ class Ui_MainWindow(object): self.hdrNextTrack.setStyleSheet("background-color: #fff3cd;\n" "border: 1px solid rgb(85, 87, 83);") self.hdrNextTrack.setText("") + self.hdrNextTrack.setWordWrap(True) self.hdrNextTrack.setObjectName("hdrNextTrack") self.verticalLayout.addWidget(self.hdrNextTrack) self.horizontalLayout_3.addLayout(self.verticalLayout) @@ -540,4 +545,5 @@ class Ui_MainWindow(object): self.actionSelect_previous_track.setShortcut(_translate("MainWindow", "K")) self.actionSelect_played_tracks.setText(_translate("MainWindow", "Select played tracks")) self.actionSelect_unplayed_tracks.setText(_translate("MainWindow", "Select unplayed tracks")) +from musicmuster import ElideLabel import icons_rc