【问题标题】:Setting font for QTextEdit is ignored for no apparent reason为 QTextEdit 设置字体被忽略,没有明显的原因
【发布时间】:2014-10-30 14:57:40
【问题描述】:

我正在尝试将QTextEdit 的字体设置为与QTreeWidget 相同。

当我从QTextEdit 获取字体并尝试将其设置为QTreeWidget 时,它不起作用。但是,如果我创建一个新字体QFont("Segoe UI", 9),它恰好与我的平台(Windows 7)上的QTreeWidget 相同,并将其设置为QTextEdit,它就可以工作。

以下代码打印True 以进行字体比较,但不能按预期工作。取消注释 self.text.setFont(new_font) 可以修复它。为什么?

import string
import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont


TEXT = string.printable[:-5]

def print_font(font):
    print("Family: {}, Size: {}".format(font.family(), font.pointSize()))


class Window(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)

        self.list = QTreeWidget(self) 
        self.list.addTopLevelItem(QTreeWidgetItem((TEXT,)))
        self.list.setRootIsDecorated(False)
        self.list.setHeaderHidden(True)
        self.list.setMinimumHeight(25)

        self.text = QTextEdit(self)
        self.text.setText(TEXT)
        self.text.setMinimumHeight(25)

        self.layout = QGridLayout()
        self.layout.setContentsMargins(5, 5, 5, 5)
        self.layout.addWidget(self.list)
        self.layout.addWidget(self.text)

        self.resize(620, 20)
        self.setLayout(self.layout)
        self.show()

        list_font = self.list.font()
        new_font = QFont("Segoe UI", 9)
        print(list_font == new_font)
        self.text.setFont(list_font)
#         self.text.setFont(new_font)

        print_font(self.list.font())
        print_font(self.text.font())


app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())

【问题讨论】:

    标签: python qt pyqt pyqt5


    【解决方案1】:

    您不能安全地假设 QFont 报告的属性与实际使用的属性相同。可能是,但不能保证。

    要安全地获取使用的实际值,您需要使用QFontInfo。在 Linux 上,我从 QFont 和 QFontInfo 得到不同的值,但字体传输成功;在 Windows 上,它们是相同的,但传输失败。呵呵。

    无论如何,在 Windows 上复制字体似乎存在一些问题,但我无法准确诊断它可能是什么。可能与字体缓存有关?

    我认为:

        list_font = QFont(self.list.font())
    

    可能会有所作为 - 但事实并非如此。最后,在 Windows 上唯一对我有用的是:

        list_font = QFont()
        list_font.fromString(self.list.font().toString())
        self.text.setFont(list_font)
    

    【讨论】:

    • 很好的洞察力。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多