Как я могу обновить QTextEdit, когда пользователь пишет на нем? (на Python) - PullRequest
0 голосов
/ 16 января 2011

Я работаю над приложением / скриптом Python + Qt WebSMS. Он запрашивает номер и сообщение и отправляет его в Vodafone с помощью механизации. Поскольку Vodafone моей страны не поддерживает UTF-8, по крайней мере для WebSMS и каждое 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, когда пользователь пишет на нем, и сделать изменения синхронизированными?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 января 2011

Одним из способов определения правильной позиции для текстового курсора будет использование codecs.register_error для определения пользовательской функции ошибки, которая дублирует "ignore", но также запоминает, сколько символов передкурсор был удален, и чтобы сдвинуть курсор на столько позиций влево после кодирования.

0 голосов
/ 16 января 2011
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)

Это был бы мой быстрый и грязный подход, однако вы все равно должны поместить текстовый курсор в правильное положение после внесения изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...