我正在尝试将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_())
答案 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)