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

时间:2016-03-26 05:21:32

标签: python python-3.x pyqt pyqt5

每当我尝试使用上一个代码块中的函数更改我的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 个答案:

答案 0 :(得分:3)

您的问题缺少很多重要信息,例如平台和您正在使用的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返回元组font, ok(其中ok是一个布尔值,表示用户是单击“确定”还是“取消”)。所以你只需要改变这一行:

    self.font, ok = QFontDialog().getFont(previous_font)