Qt Threads

Code-Stücke können hier veröffentlicht werden.
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Qt Threads

Beitragvon DasIch » Montag 24. November 2008, 03:27

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_()
Benutzeravatar
wuf
User
Beiträge: 1360
Registriert: Sonntag 8. Juni 2003, 09:50

Beitragvon wuf » Montag 24. November 2008, 09:57

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:
Take it easy Mates!
BlackJack

Beitragvon BlackJack » Montag 24. November 2008, 10:02

Zu altes Python. Die `str.format()`-Methode gibt's ab Python 2.6.
Benutzeravatar
wuf
User
Beiträge: 1360
Registriert: Sonntag 8. Juni 2003, 09:50

Beitragvon wuf » Montag 24. November 2008, 10:09

Hallo BlackJack

Stimmt ich arbeite noch mit Python 2.5

Danke für den Tipp.

Gruss wuf :wink:
Take it easy Mates!
lunar

Beitragvon lunar » Montag 24. November 2008, 10:49

Der Klassen-Zähler ist hässlich, das lässt sich besser lösen.
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Montag 24. November 2008, 15:11

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder