Welcome!

QThread

Hier möchte ich ein einfaches Beispiel eines QThreads vorstellen, was mir beim Umgang mit QThread half. Es ist in etwa das einfachste Beispiel was mir einfiel. Zunächst wird ein Fenster (Widget) mit zwei Buttons erstellt: 

  • Start Simulation
  • Stop Simulation

Über den Button "Start Simulation" wird der QThread gestartet, welcher über den Button "Stop Simulation" wieder angehalten werden kann.

Um alles einfach zu halten, sendet der QThread einach eine Nachricht an die Konsole über den print Befehl

import sys, time
from PyQt4 import QtCore, QtGui

class MyApp(QtGui.QWidget):
  def __init__(self, parent=None):
    QtGui.QWidget.__init__(self, parent)

    self.setGeometry(300, 300, 300, 100)
    self.setWindowTitle('Example for QThread')

    self.layout = QtGui.QVBoxLayout(self)

    # Start Button
    self.btn_start_sim = QtGui.QPushButton("Start Simulation")
    self.connect(self.btn_start_sim, QtCore.SIGNAL('released()'), self.start_sim)
    self.layout.addWidget(self.btn_start_sim)

    # Stop Button
    self.btn_stop_sim = QtGui.QPushButton("Stop Simulation")
    self.connect(self.btn_stop_sim, QtCore.SIGNAL('released()'), self.stop_sim)
    self.layout.addWidget(self.btn_stop_sim)

    # create Worker
    self.worker = MyWorker()

  def start_sim(self):
    print "start thread"
    self.worker.start()

  def stop_sim(self):
    print "stop thread"
    self.worker.stop()


class MyWorker(QtCore.QThread):
  def __init__(self):
    QtCore.QThread.__init__(self)
    self.exiting = False

  def run(self):
    self.exiting = False
    while not self.exiting:
      print "Hello from a QThread!"
      time.sleep(0.3)

  def stop(self):
    self.exiting = True

program = QtGui.QApplication(sys.argv)
app = MyApp()
app.show()
program.exec_()

<< Zurück zur vorherigen Seite