为 QTextEdit 设置字体被忽略,没有明显的原因

Posted

技术标签:

【中文标题】为 QTextEdit 设置字体被忽略,没有明显的原因【英文标题】:Setting font for QTextEdit is ignored for no apparent reason 【发布时间】: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_())

【问题讨论】:

【参考方案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)

【讨论】:

很好的洞察力。谢谢。

以上是关于为 QTextEdit 设置字体被忽略,没有明显的原因的主要内容,如果未能解决你的问题,请参考以下文章

QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色背景色文字颜色以及基色)

Android应用自定义字体在手机上完全被忽略

Qt QTextEdit 最大宽度的问题

QTextEdit更改单个段落/块的字体

(PyQt) 为啥我不能更改我的 QTextEdit 小部件的字体?

浏览器中忽略字体大小