【发布时间】:2021-01-20 13:54:26
【问题描述】:
在我的程序GeigerLog 中,我使用固定宽度的字体来轻松格式化表格数据。在 Linux 下运行良好,在 Windows 下运行良好,但最近在 Win10 中出现问题。
这是某些输出在 Win 和 Linux 上的样子,在 Linux 上仍然是这样的:
但这就是它现在在 Windows10 上的样子:
显然,使用了(未知的)比例字体,并且格式消失了。然而,Python 代码错误地确认即使在 Win10 上也使用了“Courier New”。这是想要的,但事实并非如此!
我尝试了 Python 3.7.3,然后是 Python 3.8.6,并尝试了 PyQt5 的最后 5 个版本(5.14.0、5.14.1、5.14.2、5.15.0、5.15.1) - 都显示相同错误的行为。
下面是相关部分的代码摘录,打印输出添加为 cmets。我定义了字体,将它应用到 NotePad 小部件,然后用 fontInfo() 检查这个小部件。在 Win10 上也确认了正确的固定宽度字体。
不过,这不是Win10上使用的,见上面的截图。
发生了什么事?我需要说服谁去做,是 Win10、Python3 还是 PyQt5?怎么做?
import platform
print("platform()", platform.platform()) # -> Windows-10-10.0.18362-SP0
print("machine()", platform.machine()) # -> AMD64
print("architecture()[0]", platform.architecture()[0]) # -> 64bit
#QMainWindow class
...
# font standard
self.fontstd = QFont()
self.fontstd.setFamily('Monospace')
self.fontstd.setFixedPitch(True)
self.fontstd.setPointSize(10)
self.fontstd.setBold(False)
self.fontstd.Weight(QFont.Black)
...
# NotePad
self.notePad = QTextEdit()
self.notePad.setFont(self.fontstd)
...
print("family():", self.notePad.fontInfo().family()) # -> Courier New
print("fixedPitch():", self.notePad.fontInfo().fixedPitch()) # -> True
【问题讨论】:
-
试试看:
self.fontstd = QFont("Consolas", 10) -
不,那没有用。也没有将“Courier New”定义为字体,我验证两者都在系统上并且可以使用。但它让我有了进一步测试的想法,结果令人惊讶;评论太复杂了,我会发一个帖子。
标签: python-3.x linux windows fonts pyqt5