2

我没有设法在 PyQt5 的 About 部分中找到修改字体的方法:

在此处输入图像描述

我希望版本 0.0 不是粗体。

这是我使用的代码:

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

显然,只可以在 About 中输入一个字符串。

有人知道如何解决这个问题吗?

4

2 回答 2

1

试试看:

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

在此处输入图像描述

于 2020-06-05T13:56:50.010 回答
0

about函数是一个静态方法:它是一个“助手”,它自动构造一个消息框,运行它exec()并返回它的结果。这意味着无法访问消息框实例,因此无法访问其字体。

请注意,因为它是一个静态方法,所以创建一个新的 QMessageBox 实例是没有用的,因为您可以about单独调用该类:

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

根据消息来源,在 MacOS Qt 上,所有消息框的标签都会自动使用粗体字体。

解决方案是避免使用静态方法,并创建一个新的 QMessageBox 实例。由于标签小部件是私有的,因此访问它的唯一方法是通过findChild(),在 PyQt 上它允许我们同时使用类对象名称;幸运的是,Qt 为标签 ( qt_msgbox_label) 设置了一个对象名称,因此我们可以访问它并相应地设置字体:

    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_()
于 2020-06-05T13:36:27.133 回答