【问题标题】:How can i remove certain fonts from QFontDatabase?如何从 QFontDatabase 中删除某些字体?
【发布时间】:2019-10-31 07:44:47
【问题描述】:

我有一个程序以从 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 的文档,但找不到方法,可能错过了一些东西。也许从具有选定字体的文件夹中实现选择会更容易?
我该怎么做?

【问题讨论】:

    标签: python pyqt pyqt5 qt-designer


    【解决方案1】:

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

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

    ma​​in.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_())
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 2021-09-06
        相关资源
        最近更新 更多