QTimer
, наряду со всеми другими классами, основанными на событиях, должен существовать экземпляр QApplication
.
В:
thread = QThread();
thread.start();
update = Updater();
update.moveToThread(thread);
update.run();
Прежде всего, избавьтесь от точек с запятой . Программисты Python не любят их.
Если вы внимательно посмотрите на то, что делает ваш код, вы создаете QThread
, запускаете его, делаете Updater
, перемещаете его в поток, запускаете и завершаете программу. Здесь нет команды, говорящей Python, чтобы она продолжала работать, поэтому она заканчивается, и QThread
жалуется на уничтожение.
Что вам нужно сделать, это сделать QApplication
с чем-то вроде
app = QApplication(sys.argv)
и вызов app.exec_()
для его запуска. В этом случае это по существу эквивалентно time.sleep(9999999999...)
, но на самом деле он обрабатывает события (сигналы / слоты) бесконечно. С time.sleep(9999999999...)
, QTimers
никогда не будет ничего делать, когда истечет время ожидания.
Поскольку QApplication
- это бесконечный цикл, вам придется вручную выйти из кода.