Seite 1 von 1

Qt Threads

Verfasst: Montag 24. November 2008, 03:27
von DasIch
Nur eine kleine Spielerei zum Einstieg, vielleicht hilfts ja jemandem

Code: Alles auswählen

from time import sleep

from PyQt4 import QtGui, QtCore

class Main(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setWindowTitle('Fibonacci Generator')
        self.layout = QtGui.QVBoxLayout(self)
        self.text = QtGui.QTextEdit(self)
        self.layout.addWidget(self.text)
        self.run_button = QtGui.QPushButton(self)
        self.run_button.setText('Run')
        self.layout.addWidget(self.run_button)
        self.workers = []
        
        self.connect(self.run_button, QtCore.SIGNAL('clicked()'), self.start)
    
    def start(self):
        worker = Worker()
        self.connect(worker, QtCore.SIGNAL('fib(int, int)'), self.handle)
        worker.start()
        self.workers.append(worker)
    
    def handle(self, n, thread):
        self.text.append('Got {0} by thread-{1}'.format(n, thread))

class Worker(QtCore.QThread):
    count = 0
    def __init__(self):
        QtCore.QThread.__init__(self)
        self.__class__.count += 1
        self.count = self.__class__.count

    def run(self):
        x = 0
        y = 1
        while True:
            self.emit(QtCore.SIGNAL('fib(int, int)'), x, self.count)
            x, y = y, x + y
            sleep(3)

if __name__ == '__main__':
    app = QtGui.QApplication([])
    main = Main()
    main.show()
    app.exec_()

Verfasst: Montag 24. November 2008, 09:57
von wuf
Hallo DasIch

Wenn ich die Schaltfläche 'Run' betätige bekomme ich folgende Fehlermeldung:
Traceback (most recent call last):
File "qt_threads_01.py", line 26, in handle
self.text.append('Got {0} by thread-{1}'.format(n, thread))
AttributeError: 'str' object has no attribute 'format'
Traceback (most recent call last):
Was könnte das sein?
(Sorry ich habe noch nie etwas Qt programmiert)

Gruss wuf :wink:

Verfasst: Montag 24. November 2008, 10:02
von BlackJack
Zu altes Python. Die `str.format()`-Methode gibt's ab Python 2.6.

Verfasst: Montag 24. November 2008, 10:09
von wuf
Hallo BlackJack

Stimmt ich arbeite noch mit Python 2.5

Danke für den Tipp.

Gruss wuf :wink:

Verfasst: Montag 24. November 2008, 10:49
von lunar
Der Klassen-Zähler ist hässlich, das lässt sich besser lösen.

Verfasst: Montag 24. November 2008, 15:11
von DasIch
lunar hat geschrieben:Der Klassen-Zähler ist hässlich, das lässt sich besser lösen.
Ich weiß dass es deutlich bessere möglichkeiten gibt aber für die kleine Spielerei die sowieso nie produktiv Code wird hats gereicht.

@wuf

Code: Alles auswählen

'Got {0} by thread-{1}'.format(n, thread)
'Got %i by thread-%i' % (n, thread)
Beide machen dasselbe allerdings...
Doku hat geschrieben:This method of string formatting is the new standard in Python 3.0, and should be preferred to the % formatting described in String Formatting Operations in new code.