如何在用户输入时更新QTextEdit?(Python)
我正在开发一个使用Python和Qt的WebSMS应用程序/脚本。这个程序会询问用户输入一个电话号码和短信内容,然后通过mechanize发送给Vodafone。由于我所在国家的Vodafone不支持UTF-8,至少在WebSMS中,每条短信的长度必须少于160个字符,所以我使用了这样的设置:
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,让这些变化能够同步显示呢?
谢谢,
2 个回答
0
检测文本光标正确位置的一种方法是使用 codecs.register_error
来定义一个自定义的错误处理函数。这个函数的功能类似于 "ignore"
,但是它还会记住光标前面删除了多少个字符,然后在编码后把光标向左移动相应的位数。
0
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)
这是我快速且简单的方法,不过在做完修改后,你还是得把文本光标放到正确的位置。