PyQt4 TextEdit.clear вызывает сбой - PullRequest
       30

PyQt4 TextEdit.clear вызывает сбой

0 голосов
/ 18 декабря 2011

У меня есть список типов deque (очередь), который я хотел бы показать и обновить в QTextEdit. В классе MyForm есть функция uuenda_kama, которая должна это делать (и некоторые другие s *** тоже). Первый проход этой функции, когда textEdit пуст, работает как брелок, все необходимые поля обновляются. Но на втором проходе, когда к нему добавлен какой-то текст, он вылетает, бросая мне в лицо отладчик Visual Studio. Попытался прокомментировать разные части и выяснил, что это вызвано строкой "self.ui.textEdit.clear ()". Что с ним не так и почему он работает на первом проходе? Что я могу сделать, чтобы это исправить? Код у меня сейчас:

class MyForm(QtGui.QMainWindow):
    ...
    def uuenda_kama(self):
        while True:
        ...
        if vana_que != list(que):
            self.ui.textEdit.clear()
            for i in que:
                self.ui.textEdit.append(i)
            vana_que = list(que)
        sleep(1)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    uuendamine = Thread(target=myapp.uuenda_kama)
    uuendamine.start()
    myapp.show()
    sys.exit(app.exec_())

1 Ответ

1 голос
/ 18 декабря 2011

Вы не должны создавать стандартный поток Python вне всего приложения, которое запускает методы на ваших qwidgets.Вместо этого у вас должен быть QThread, который выполняет логику, не связанную с графическим интерфейсом, а затем выдает сигнал, когда хочет, чтобы основной поток воздействовал на графический интерфейс

. Обратитесь к этому другому вопросу для хорошего примера: Как изменить прогресспо рабочему потоку

Вы никогда не должны вызывать методы графического интерфейса непосредственно вне основного потока.

...