无明显原因忽略设置QTextEdit的字体

时间:2014-10-30 14:57:41

标签: python qt pyqt pyqt5

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

当我从QTextEdit获取字体并尝试将其设置为QTreeWidget时,它不起作用。但是,如果我创建了一个新字体QFont("Segoe UI", 9),它恰好与我的平台上的QTreeWidget相同(Windows 7)并将其设置为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 个答案:

答案 0 :(得分:2)

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

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

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

我想:

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

可能会有所作为 - 但它并没有。最后,在Windows上唯一对我有用的是:

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