为什么QFontDialog.getFont()总是返回相同的字体?

2024-09-28 22:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

每次我使用QFontDialog.getFont()获取字体时,它都返回相同的QFont对象。在

font, ok = QFontDialog.getFont()
print(font)
if ok:
    self.lbl.setFont(font)
print(self.lbl.font())

上面是代码段,结果是下面的(我做了不同的选择,但是QLabel的字体和我从{}得到的字体总是相同的)。在

^{pr2}$

更新

以下是有关我的环境的一些信息:

  • 马科斯莫哈韦
  • PyQt5型
  • Python 3.6

我用@ekhurvo测试了代码,结果很奇怪:

BEFORE:
  string:.SF NS Text, 13,-1,5,50,0,0,0,0,0
  family:.SF NS Text
   size:13

AFTER:
  string:.SF NS Text, 13,-1,5,50,0,0,0,0,0
  family:.SF NS Text
   size:13

Tags: textselfsizestring字体oksffamily
2条回答

更新

这似乎是由只影响macOS的bug引起的:请参见QTBUG-6071QTBUG-69878。这应该已经在Qt-5.12中修复了,所以您需要确保安装了Qt5和PyQt5的最新版本,才能解决这个问题。在


下面是一个测试脚本,其中包含我在Linux上使用Qt-5.12.0和PyQt-5.11.3得到的输出的一些屏幕截图。正如你所看到的,一切都按预期进行。如果您得到了不同的行为,您应该edit your question并说明您正在使用的Qt和PyQt的确切版本,在哪个平台上进行测试,并显示测试脚本的一些示例输出。在

测试脚本

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.button = QtWidgets.QPushButton('Change Font')
        self.button.clicked.connect(self.updateLabel)
        self.label = QtWidgets.QLabel()
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.label)
        layout.addWidget(self.button)
        self.updateLabel()

    def updateLabel(self):
        if self.label.text():
            new = QtWidgets.QFontDialog.getFont()[0]
        else:
            new = QtGui.QFont(self.label.font())
        before = self.label.font()
        self.label.setFont(new)
        after = self.label.font()
        text = []
        for font in before, after:
            info = QtGui.QFontInfo(font)
            text.append('BEFORE:' if font is before else 'AFTER:')
            text.append('  string: %s' % font.toString())
            text.append('  family: %s' % info.family())
            text.append('    size: %s' % info.pointSize())
            text.append('')
        text = '\n'.join(text)
        self.label.setText(text)
        print(text)

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setGeometry(800, 100, 500, 100)
    window.show()
    sys.exit(app.exec_())

输出

enter image description hereenter image description hereenter image description here

<PyQt5.QtGui.QFont object at 0x10b4287b8>只提供对象在内存中的位置,它基本上是一个内存单元号,但以十六进制表示。您可以在同一个内存空间中存储一个不同的对象(这里是一个不同的QFont对象)。在

您可以通过执行以下操作来检查这里的QFont对象是否是您选择的对象:

font, ok = QFontDialog.getFont()
print(font.toString())

Update: Could you try the following code and tell us what you get?

^{pr2}$

相关问题 更多 >