Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在用户写入时更新QTextEdit?(关于Python)_Python_Qt - Fatal编程技术网

如何在用户写入时更新QTextEdit?(关于Python)

如何在用户写入时更新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

我正在开发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")
  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,则将光标向左移动一个。