我如何从 QFontDatabase 中删除某些字体?

How can i remove certain fonts from QFontDatabase?

我有一个程序可以用从 QFontDatabase 中随机选择的字体显示我的消息:

import sys

from PyQt5 import uic
from PyQt5.QtGui import QFont, QFontDatabase
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow


class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("main1.ui", self)

        db = QFontDatabase()
        family = random.choice(db.families())
        print(family)
        font = db.font(family, "", 72)
        self.label.setFont(font)
        self.run()

    def run(self):
        self.label.setText("message")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = MyWidget()
    ex.show()
    sys.exit(app.exec_())

问题如下:我意识到由于某些原因我需要从我的数据库中删除大部分标准字体。
我已经阅读了 QFont 的文档,但找不到一种方法来做,也许错过了一些东西。也许从具有选定字体的文件夹中实现选择会更容易?
我该怎么做?

创建字体系列列表并选择:

import sys
import random
from PyQt5 import uic
from PyQt5.QtGui import QFont, QFontDatabase
from PyQt5.QtWidgets import (QApplication, QWidget, QMainWindow, 
                             QLabel, QGridLayout, QPushButton)


class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()

        self.dbFamilies = ['Algerian', 'Arial Narrow', 'Consolas', 'Georgia', 
                           'Times', 'Helvetica', 'SansSerif', 'Comic Sans MS',]

#        uic.loadUi("main1.ui", self)

        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)

        self.label = QLabel()
        button = QPushButton("Choose a different font-family", clicked=self.run)

        grid = QGridLayout(centralWidget)
        grid.addWidget(self.label)
        grid.addWidget(button)

        self.run()

    def run(self):
        family = random.choice(self.dbFamilies)
        self.label.setFont(QFont("{}".format(family), 72))
        self.label.setText(family)
        self.label.adjustSize()        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = MyWidget()
    ex.show()
    sys.exit(app.exec_())

什么是标准字体?由于没有分类,所以很难知道。因此,正如您指出的那样,最好有一个字体所在的文件夹,然后随机选择其中一个,然后我们使用 QFontDatabase::addApplicationFont() 注册它,使用 QFontDatabase::applicationFontFamilies():

获取系列
├── fonts
│   ├── A.ttf
│   .
|   .
|   .
│   ├── ...
│   └── Z.ttf
├── main1.ui
└── main.py 

main.py

import os
import random
import sys

from PyQt5 import uic
from PyQt5.QtGui import QFont, QFontDatabase
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow


class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("main1.ui", self)

        current_dir = os.path.dirname(os.path.realpath(__file__))
        font_dir = os.path.join(current_dir, "fonts")

        files = os.listdir(font_dir)
        file = random.choice(files)
        print(file)

        id_ = QFontDatabase.addApplicationFont(os.path.join(font_dir, file))
        families = QFontDatabase.applicationFontFamilies(id_)
        family = random.choice(families)

        font = QFont(family, 72)
        self.label.setFont(font)
        self.run()

    def run(self):
        self.label.setText("message")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = MyWidget()
    ex.show()
    sys.exit(app.exec_())