(PyQt) 为什么我不能改变我的QTextEdit小部件的字体?

3
每当我尝试使用上一个代码块中的函数更改QTextEdit小部件的字体时,程序会立即崩溃并显示错误代码1。可能的原因是什么?
self.font = QFont("Arial")

...

self.text_edit = QTextEdit()
self.setCentralWidget(self.text_edit)
self.text_edit.setCurrentFont(self.font)      

...

def aFont(self):
    previous_font = self.font
    self.font = QFontDialog().getFont(previous_font)
    if self.font != previous_font:
        self.text_edit.selectAll()
        self.text_edit.setCurrentFont(self.font)
1个回答

2
您的问题缺少许多重要信息,例如您正在使用的平台和PyQt版本,以及完整的回溯信息。然而,假设您正在使用PyQt-5.5,那么可以对问题的可能原因进行合理的猜测。
在以前的PyQt版本中,某些未处理的异常会导致打印到stderr的回溯,但不会中断应用程序的执行。但这不是正常的Python脚本行为。因此,在PyQt-5.5中已经纠正了这种行为,当遇到未处理的异常时,应用程序现在将立即中止(请参阅PyQt5文档中的与早期版本的不兼容性)。
我不知道您运行应用程序时看到了什么(我假设您在Windows上),但在Linux上,我看到了这个:
Traceback (most recent call last):
  File "test.py", line 21, in aFont
    self.text_edit.setCurrentFont(self.font)
TypeError: QTextEdit.setCurrentFont(QFont): argument 1 has unexpected type 'tuple'
Aborted (core dumped)

因此,应用程序不会“崩溃”-只是在遇到未处理的异常时中止。具体的错误是由这一行引起的:
    self.font = QFontDialog().getFont(previous_font)

因为 `getFont` 返回一个元组 `font, ok`(其中 `ok` 是一个布尔值,表示用户是否单击了“确定”或“取消”按钮)。所以你只需要将这一行改为以下内容:
    self.font, ok = QFontDialog().getFont(previous_font)

1
或者如果我们只需要字体 - self.font = QFontDialog().getFont(previous_font)[0] - user5413945

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接