Autechre
Autechre

Reputation: 604

How to modify the font in a layout in the About section in PyQt5?

I don't manage to find a way to modify the font in the About section in PyQt5 :

enter image description here

I would like Version 0.0 not being in bold.

Here is the code I used :

about_box = QMessageBox()
about_box.about(self.parent(), "About", "Appli\nVersion 0.0")

Apparently, it's just possible to enter a mere string in the About.

Someone knows how to pull this off ?

Upvotes: 1

Views: 587

Answers (2)

S. Nick
S. Nick

Reputation: 13691

Try it:

from PyQt5 import QtCore, QtGui, QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowIcon(QtGui.QIcon("icono.png"))                  
        menu = self.menuBar().addMenu("Menu")
        self.actionAbout = menu.addAction("About")
        self.actionAbout.triggered.connect(self.openAbout)

    @QtCore.pyqtSlot()
    def openAbout(self):
        messagebox = QtWidgets.QMessageBox(
            QtWidgets.QMessageBox.NoIcon,
            "About",
            """
              <p style='color: white; text-align: center;'> Appli<br>  
                <b style='color: yellow; font: italic bold 16px;'>Version 0.0</b> 
              </p>
            """,
            parent=self,
        )

        messagebox.setIconPixmap(QtGui.QPixmap("Qt.png").scaled(100, 100, QtCore.Qt.KeepAspectRatio))
        messagebox.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        messagebox.setStyleSheet("""
            QMessageBox {
                border: 5px solid blue;           
                border-radius: 5px;
                background-color: rgb(100, 1, 1);
            }         
        """)

        messagebox.exec_()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

enter image description here

Upvotes: 1

musicamante
musicamante

Reputation: 48444

The about function is a static method: it is a "helper", which automatically constructs a message box, runs its exec() and returns its result. This means that there's no way to access the message box instance and, therefore, its font.

Note that, since it's a static method, there's no use in creating a new instance of QMessageBox, as you could call about on the class alone:

QMessageBox.about(self.parent(), "About", "Appli\nVersion 0.0")

According to the sources, on MacOS Qt automatically uses a bold font for the label of all message boxes.

The solution is to avoid the static method, and create a new instance of QMessageBox. Since the label widget is private, the only way to access it is through findChild(), which on PyQt allows us to use both a class and an object name; luckily, Qt sets an object name for the label (qt_msgbox_label), so we can access it and set the font accordingly:

    def showAbout(self):
        msgBox = QMessageBox(QMessageBox.NoIcon, 'About', 'Appli\nVersion 0.0', 
            buttons=QMessageBox.Ok, parent=self.parent())
        # find the QLabel
        label = msgBox.findChild(QLabel, 'qt_msgbox_label')
        # get its font and "unbold" it
        font = label.font()
        font.setBold(False)
        # set the font back to the label
        label.setFont(font)
        msgBox.exec_()

Upvotes: 0

Related Questions