(PyQt) 为什么我不能更改我的 QTextEdit 小部件的字体?
(PyQt) Why can't I change the font of my QTextEdit widget?
每当我尝试使用上一个代码块中的函数更改 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)
您的问题缺少很多重要信息,例如您使用的平台和 PyQt 版本,以及完整的回溯。但是,假设您使用的是 PyQt-5.5,则可以对问题的可能原因做出合理的猜测。
在以前的 PyQt 版本中,某些未处理的异常只会导致将回溯打印到 stderr,而不会以其他方式中断应用程序的执行。但这不是正常的 python 脚本的行为方式。因此 PyQt-5.5 中的行为已得到纠正,因为应用程序现在会在遇到未处理的异常时立即中止(请参阅 PyQt5 文档中的 Incompatibilities with Earlier Versions)。
我不知道你在运行你的应用程序时看到了什么(我假设你在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)
所以应用程序不会 "crash" - 它只是在遇到未处理的异常时中止。具体错误是这一行引起的:
self.font = QFontDialog().getFont(previous_font)
因为 getFont
returns 一个元组 font, ok
(其中 ok
是一个布尔值,指示用户是单击确定还是取消)。所以你只需要把这行改成这样:
self.font, ok = QFontDialog().getFont(previous_font)
每当我尝试使用上一个代码块中的函数更改 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)
您的问题缺少很多重要信息,例如您使用的平台和 PyQt 版本,以及完整的回溯。但是,假设您使用的是 PyQt-5.5,则可以对问题的可能原因做出合理的猜测。
在以前的 PyQt 版本中,某些未处理的异常只会导致将回溯打印到 stderr,而不会以其他方式中断应用程序的执行。但这不是正常的 python 脚本的行为方式。因此 PyQt-5.5 中的行为已得到纠正,因为应用程序现在会在遇到未处理的异常时立即中止(请参阅 PyQt5 文档中的 Incompatibilities with Earlier Versions)。
我不知道你在运行你的应用程序时看到了什么(我假设你在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)
所以应用程序不会 "crash" - 它只是在遇到未处理的异常时中止。具体错误是这一行引起的:
self.font = QFontDialog().getFont(previous_font)
因为 getFont
returns 一个元组 font, ok
(其中 ok
是一个布尔值,指示用户是单击确定还是取消)。所以你只需要把这行改成这样:
self.font, ok = QFontDialog().getFont(previous_font)