设置QTextEdit的字体无明显原因被忽略
我想把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 个回答
3
你不能完全相信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)