我没有设法在 PyQt5 的 About 部分中找到修改字体的方法:
我希望版本 0.0 不是粗体。
这是我使用的代码:
about_box = QMessageBox()
about_box.about(self.parent(), "About", "Appli\nVersion 0.0")
显然,只可以在 About 中输入一个字符串。
有人知道如何解决这个问题吗?
试试看:
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_())
该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_()