Как установить свой шрифт?

Мой код

import sys
from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
    QRect, QSize, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
    QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
    QRadialGradient)
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1038, 722)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(10, 10, 191, 121))


        font_id = QFontDatabase.addApplicationFont(":/my_font.ttf")
        font = QFont("my_font", 12)
        font.setFamily(u"my_font")
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)

        self.label.setText('&#e435')



        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 1038, 21))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))

StyleSheet = """
#centralwidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#000;
color:#fff;
}
#centralwidget QWidget,
#centralwidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#fff;
color:#000;
}
"""

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(StyleSheet)
    window = MainWindow()
    window.show()
sys.exit(app.exec_())

Мне нужно чтобы вместо &#e435 программа выводила мне иконку, но проблема в том что я не знаю как подключить шрифт. addApplicationFont() не говорит мне нашел ли он шрифт по этому пути или нет. Поэтому я даже не знаю в чем может быть проблема. Кто нибудь знает решение этой пролемы?


Ответы (1 шт):

Автор решения: gil9red

addApplicationFont() не говорит мне нашел ли он шрифт по этому пути или нет.

Согласно описанию метода int QFontDatabase::addApplicationFont(const QString &fileName), тот вернет -1, если файл шрифта не был найден:

The function returns -1 if the font could not be loaded.

Поэтому, добавляйте проверку, например:

font_id = QFontDatabase.addApplicationFont(":/my_font.ttf")
if font_id == -1:
    QMessageBox.warning(self, "Внимание", "Пользовательский шрифт не был найден!")
...

А двоеточие (:/) в пути к шрифту ":/my_font.ttf" соответствует пути в файле ресурсов Qt (формат .qrc), если вы не используете qrc, то укажите стандартный полный или относительный путь к файлу

→ Ссылка