我正在用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语句会阻止代码运行。
答案 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_()