每当我尝试使用最后一个代码块中的函数更改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)
因此,应用程序不会“崩溃”,它会在遇到未处理的异常时中止运行.具体错误是由以下行引起的:
self.font = QFontDialog().getFont(previous_font)
因为getFont返回一个元组字体,所以ok(其中ok是一个布尔值,指示用户是否单击Ok或Cancel).因此,您只需要更改以下行即可:
self.font, ok = QFontDialog().getFont(previous_font)