(PyQt) 为啥我不能更改我的 QTextEdit 小部件的字体?

Posted

技术标签:

【中文标题】(PyQt) 为啥我不能更改我的 QTextEdit 小部件的字体?【英文标题】:(PyQt) Why can't I change the font of my QTextEdit widget?(PyQt) 为什么我不能更改我的 QTextEdit 小部件的字体? 【发布时间】:2016-03-26 05:21:31 【问题描述】:

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

您的问题缺少很多重要信息,例如您正在使用的平台和 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)

【讨论】:

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

以上是关于(PyQt) 为啥我不能更改我的 QTextEdit 小部件的字体?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Java 方法不能更改传递的变量? [复制]

为啥 PyQt 中的 keyPress 事件对 Enter 键不起作用?

为啥我的vs2010安装时不能更改路径。预设C盘

为啥我的 pyqt 信号错误会冻结 ui,直到调用另一个 python 函数

Pyqt5--为啥 QApplication.processEvents() 更新 GUI 失败

为啥我不能更改状态栏的颜色?