如何在用户输入时更新QTextEdit?(Python)

0 投票
2 回答
604 浏览
提问于 2025-04-16 10:04

我正在开发一个使用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)

这是我快速且简单的方法,不过在做完修改后,你还是得把文本光标放到正确的位置。

撰写回答