2011-12-18 2 views
0

У меня есть список типов deque (очередь), который я хотел бы показать и обновить в QTextEdit. В классе MyForm есть функция uuenda_kama, которая должна это делать (и некоторые другие s *** тоже). Первый проход этой функции, когда textEdit пуст, работает как шарм, обновляются все необходимые поля. Но на втором этапе, когда в него добавлен текст, он сбрасывает меня с отладчиком Visual Studio. Пробовал комментировать разные части и вышел, что приводит к этой строке «self.ui.textEdit.clear()». Что не так с этим и почему он работает на первом проходе? Что я могу сделать, чтобы исправить это? код я прямо сейчас:PyQt4 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_()) 
+0

Почему вы используете стандартный поток python для запуска цикла, который вызывает вызовы ваших виджетов qt? Это выглядит неправильно. – jdi

+0

Потому что это не выглядело неправильно для меня? И, похоже, сначала это было хорошо. Попробуй свой совет! – Zhack

ответ

1

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

Обратитесь к этому другому вопросу для хорошего примера: Howto change progress by worker thread

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

+0

Спасибо, парень, похоже, отлично работает с QThreads! – Zhack

Смежные вопросы