文本编辑始终为大写

时间:2015-01-03 12:47:05

标签: python qt pyside uppercase qtextedit

我正在用PySide编写编剧应用程序。我想要的是在用户输入时将字符转换为大写。

以下代码段给出了一个运行时错误,说"超出了最大递归深度"每次我添加一个角色。我明白它意味着什么以及它为什么会发生但是有不同的方式吗?

self.cursor = self.recipient.textCursor()
self.cursor.movePosition(QTextCursor.StartOfLine)
self.cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor)
self.curtext = self.cursor.selectedText()
if len(self.curtext) > len(self.prevText):
    self.cursor.insertText(self.curtext.upper())
    self.cursor.clearSelection()
self.prevText = self.curtext

只要文本编辑小部件中的文本发生更改,上面的代码就会运行。当用户没有插入文本时,if语句会阻止代码运行。

1 个答案:

答案 0 :(得分:2)

您可能会收到递归错误,因为在将输入修复为大写时,您正在更改内容并再次触发相同的修复例程。此外,您不断更改整条线,而只有一部分已更改,需要修复。

幸运的是,Qt可以使用QTextCharFormat来完成此任务。以下示例自动将所有文本保留为QLineEdit大写。而且你可以做更多with it,如下划线或粗体文字......

示例:

from PySide import QtGui

app = QtGui.QApplication([])

widget = QtGui.QTextEdit()
fmt = QtGui.QTextCharFormat()
fmt.setFontCapitalization(QtGui.QFont.AllUppercase)
widget.setCurrentCharFormat(fmt)
widget.show()

app.exec_()