为 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中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色背景色文字颜色以及基色)