Во-первых, я очень новичок в Python и Pyside. Чтобы немного самосовершенствоваться, я пытаюсь заставить QTimer выполняться каждую секунду в дочернем потоке моей программы PySide (на данный момент я просто хочу, чтобы он печатал «привет!» на терминал каждую секунду без зависания главного окна).
Я попытался преобразовать пример, найденный в Qt Wiki, с C++ на Python/PySide, но поскольку я действительно не знаю С++, я предполагаю, что преобразовал его неправильно, и поэтому он не работает должным образом.
На данный момент кажется, что функция doWork() выполняется только один раз и больше никогда. Что я делаю не так? Есть ли лучший способ выполнять функцию каждую секунду в PySide без зависания главного окна?
Вот код (для большей ясности я удалил некоторый код главного окна):
from PySide import QtGui
from PySide import QtCore
from client_gui import Ui_MainWindow
statsThread = QtCore.QThread()
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
#setup GUI
self.setupUi(self)
#start thread to update GUI
self.statsThread = updateStatsThread()
self.statsThread.start(QtCore.QThread.TimeCriticalPriority)
class updateGuiWithStats(QtCore.QObject):
def Worker(self):
timer = QtCore.QTimer()
timer.timeout.connect(self.doWork())
timer.start(1000)
def doWork(self):
print "hi!"
class updateStatsThread (QtCore.QThread):
def run(self):
updater = updateGuiWithStats()
updater.Worker()
self.exec_()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
frame = MainWindow()
frame.show()
sys.exit(app.exec_())