首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本编辑始终大写

文本编辑始终大写
EN

Stack Overflow用户
提问于 2015-01-03 20:47:05
回答 1查看 1.3K关注 0票数 1

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

下面这段代码在每次我添加一个字符时都会给出一个运行时错误"maximum recursion depth exceeded“。我知道这意味着什么,为什么它会发生,但有没有不同的方式呢?

代码语言:javascript
复制
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语句阻止代码在用户未插入文本时运行。

EN

回答 1

Stack Overflow用户

发布于 2015-01-06 20:43:50

你得到一个递归错误,可能是因为当将输入固定为大写时,你改变了你的内容,并再次触发了完全相同的固定例程。此外,您还会不断地更改整行,而只有一部分发生了更改,需要进行修复。

幸运的是,Qt可以使用QTextCharFormat自己完成这项工作。这是一个自动将所有文本保留为QLineEdit大写的示例。你还可以做更多的with it,比如给文本加下划线或加粗……

示例:

代码语言:javascript
复制
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_()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27755004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档