Как я могу удалить определенные шрифты из QFontDatabase? - PullRequest
1 голос
/ 31 октября 2019

У меня есть программа, которая показывает мое сообщение случайным образом выбранным шрифтом из 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, но не смог найти способ сделать это, возможно, что-то пропустил. Может быть, было бы проще реализовать выбор из папки с выбранными шрифтами?
Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Что такое стандартные шрифты? Так как нет классификации, это трудно узнать. Таким образом, как вы указываете, лучше иметь папку, в которой находятся шрифты, а затем случайным образом выбрать один из них, а затем мы регистрируем его, используя QFontDatabase::addApplicationFont(), получая семейства, используя QFontDatabase::applicationFontFamilies():

├── fonts
│   ├── A.ttf
│   .
|   .
|   .
│   ├── ...
│   └── Z.ttf
├── main1.ui
└── main.py 

* 1006. * 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_())
1 голос
/ 31 октября 2019

Создайте список семейства шрифтов и выберите:

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

enter image description here

...