在PyQt应用程序中加载FontAwesome

3

我一直在尝试在我的PyQt应用程序中使用FontAwesome中提供的图标。我已经下载了.ttf文件,并使用addApplicationFont方法将字体加载到我的应用程序中。我有一个QToolButton,我想从AwesomeFont中设置一个图标。我无法弄清楚如何从数据库中选择图标。附上参考代码:

import sys

from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
    css = """
        QToolButton{{
            border: None;
        }}
    """

    def __init__(self):
        super(Window, self).__init__()

        font_id = QtGui.QFontDatabase.addApplicationFont("fontawesome-webfont.ttf")

        if font_id is not -1:
            font_db = QtGui.QFontDatabase()
            self.font_styles = font_db.styles('FontAwesome')
            self.font_families = QtGui.QFontDatabase.applicationFontFamilies(font_id)
            for font_family in self.font_families:
                self.font = font_db.font(font_family, self.font_styles.first(), 24)
        self.home()

    def home(self):
        self.setStyleSheet(self.css.format())

        btn = QtGui.QToolButton(self)
        btn.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
        btn.setFont(self.font)
        btn.setText('.....')
        btn.clicked.connect(QtCore.QCoreApplication.instance().quit)

        self.show()

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

run()

你确定你理解fontawesome是什么以及它如何工作吗?它显然是一种网络技术 - 看看这些示例 - ekhumoro
嘿,ekhumoro,我找到了一个第三方包,可以让人们在PyQt中使用Font Awesome图标。虽然它不像我上面所做的那么简单,但是这是可能的。感谢您提供的信息... - Anvith
太好了!你能把它写成答案吗,这样其他人也可以从你的发现中受益? - ekhumoro
2个回答

5

如果有人不想使用第三方包,可以参考以下修改后的代码来加载字体。

然而,为了方便未来可能需要此功能的人,我会提供我的解决方案。有一个名为Qtawesome的pypi包,可以通过几个简单的步骤加载字体。

import sys
from six import unichr

from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
    css = """
        QToolButton{{
            border: None;
        }}
    """

    def __init__(self):
        super(Window, self).__init__()

        font_id = QtGui.QFontDatabase.addApplicationFont("fontawesome-webfont.ttf")

        if font_id is not -1:
            font_db = QtGui.QFontDatabase()
            self.font_styles = font_db.styles('FontAwesome')
            self.font_families = QtGui.QFontDatabase.applicationFontFamilies(font_id)
            for font_family in self.font_families:
                self.font = font_db.font(font_family, self.font_styles.first(), 24)
        self.home()

    def home(self):
        self.setStyleSheet(self.css.format())

        btn = QtGui.QToolButton(self)
        btn.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
        btn.setFont(self.font)
        btn.setText(unichr(int('e025', 16)))
        btn.clicked.connect(QtCore.QCoreApplication.instance().quit)

        self.show()

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

run()

2
您可以使用QtAwesome代替https://pypi.org/project/QtAwesome/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接