(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 小部件的字体?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PyQt 中的 keyPress 事件对 Enter 键不起作用?
为啥我的 pyqt 信号错误会冻结 ui,直到调用另一个 python 函数