如何在用户写入时更新QTextEdit?(关于Python)
我正在开发Python+QtWebMS应用程序/脚本。它需要一个号码和信息,并通过mechanize发送给沃达丰。由于我所在国家的沃达丰不支持UTF-8,至少对于WebMs,并且每条SMS应少于160个字符,因此我使用以下设置:如何在用户写入时更新QTextEdit?(关于Python),python,qt,Python,Qt,我正在开发Python+QtWebMS应用程序/脚本。它需要一个号码和信息,并通过mechanize发送给沃达丰。由于我所在国家的沃达丰不支持UTF-8,至少对于WebMs,并且每条SMS应少于160个字符,因此我使用以下设置: def setMesaj(): global mesaj mesaj = unicode(self.textEdit.toPlainText().toUtf8(), "utf-8") mesaj = mesaj.encode("ascii", "ignore
def setMesaj():
global mesaj
mesaj = unicode(self.textEdit.toPlainText().toUtf8(), "utf-8")
mesaj = mesaj.encode("ascii", "ignore")
if (len(mesaj)) > 159:
print "[WARN-1] Mesaj 160 karakterden fazla?"
i = len(mesaj) - 159
mesaj = mesaj [:-i]
print mesaj
QtCore.QObject.connect(self.textEdit, QtCore.SIGNAL("textChanged()"), setMesaj)
嗯,这很有效。如果消息超过160个字符,最后一个字母将自动删除,如果用户试图键入任何“怪异”字符,则不会接受
我的问题是:变量“mesaj”工作得很好,但它不会更新QTextEdit,因此当它没有得到任何超过160个字符(或Unicode)的内容时,用户看起来仍然可以使用它。那么,如何在用户写入时更新QTextEdit并使更改显示为同步
谢谢
def setMesaj(self):
mesaj = unicode(self.toPlainText().toUtf8(), "utf-8")
ascii = mesaj.encode("ascii", "ignore")
if ascii != mesaj:
self.setPlainText(ascii)
if (len(mesaj)) > 159:
QtGui.QMessageBox.warning(self, 'warning', "[WARN-1] Mesaj 160 karakterden fazla?")
i = len(mesaj) - 159
mesaj = mesaj [:-i]
self.setPlainText(mesaj)
这将是我快速而肮脏的方法,但是在进行编辑后,您仍然必须将文本光标放在正确的位置。检测文本光标正确位置的一种方法是定义自定义错误函数,该函数重复
“忽略”
,但也能记住光标前面有多少个字符被删除,并在编码后将光标向左移动了那么多位置。尝试过了,效果很好,谢谢,但正如您所说,文本光标放错了位置。因为它将在移动设备上工作,所以它现在对我来说是一个重要的问题。无论如何,谢谢你:)让我们看看是否有更好的方法来做这件事。(不一定基于我的代码,只需将字符数限制为160并删除unicode)耶^^我自己解决了这个问题:cur=self.textEdit.textCursor()和cur.movePosition(QtGui.QtextCursor.End),然后self.textEdit.setTextCursor(cur)完成了这个任务。非常感谢。谢谢,你能给我一个关于向左移动光标的示例代码吗?或者,我不能把它移到最后吗?此外,该函数在每个字母之后运行,因此我认为不需要记住删除了多少个字符,因为每次运行只删除1个字符,不是吗?哦,在这种情况下,您可以比较前后的长度,如果新长度小于1,则将光标向左移动一个。