2016-05-23 26 views
0

Meine Benutzeroberfläche (Qt Designer) hat eine "Start" -Taste, eine "Stop" -Taste und eine lcdNumber, die die Sekunden zwischen "Start" und "Stop" anzeigen soll ". Ich folgte den Anweisungen gibt: Can't seem to get pyqt countdown timer to workQTimer/Python: Sekunden von Anfang bis Ende zählen

Aber mein timeout nicht funktioniert, obwohl connect mir vorgeschlagen wurde, während diese Zeile schreiben: QtCore.QTimer.timeout.connect (self.tick_timer) Attribute: ‚PyQt4.QtCore. pyqtSignal‘Objekt hat kein Attribut 'connect'

ich habe auch versucht Linien zu implementieren, wie die (QtCore.QTimer.connect(QtCore.QTimer(), QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()"))) in meiner update_timer Funktion, aber dies führt zu Fehlern (Object :: connect: keine solche Slot Mainwindow :: func() Object :: connect: (Empfängername: 'MainWindow')) und ich verstehe nicht wirklich, wie man das Verbindungssignal mit Timeout verwendet.

Wenn ich diese "timeout" -Linie auszeichne, erscheint das MainWindow, aber das Klicken auf den "Start" -Button startet die "tick_timer" -Funktion offensichtlich nur einmal, weil das LCD-Display 0:01 anzeigt.

Danke für Ihre Hilfe!

from PyQt4 import QtCore, QtGui, uic 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     uic.loadUi('MainWindow.ui', self) 
     # Buttons 
     self.QStartButton.clicked.connect(self.start_timer) 
     self.QStopButton.clicked.connect(self.stop_timer) 
     # Timer 
     QtCore.QTimer.timeout.connect(self.tick_timer) 

    def start_timer(self): 
     self.now = 0 
     self.tick_timer() 
     QtCore.QTimer.start 

    def update_timer(self): 
     self.runtime = "%d:%02d" % (self.now/60,self.now % 60) 
     self.lcdNumber.display(self.runtime) 

    def tick_timer(self): 
     self.now += 1 
     self.update_timer() 

    def stop_timer(self): 
     QtCore.QTimer.stop 

Antwort

0

Update: Die „Sekunden“ entsprechen nun echte Sekunden, musste ich definieren, dass ein „Tick“ alle 1000 ms passieren sollte: self.timer.start(1000)

from PyQt4 import QtCore, QtGui, uic 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     uic.loadUi('MainWindow.ui', self) 
     # Buttons 
     self.QStartButton.clicked.connect(self.start_timer) 
     self.QStopButton.clicked.connect(self.stop_timer) 

    def start_timer(self): 
     # Initialize timer 
     self.timer = QtCore.QTimer() 
     self.now = 0 
     # Update display and start timer 
     self.update_timer() 
     self.timer.timeout.connect(self.tick_timer) 
     self.timer.start(1000) # Duration of one second = 1000 msec 

    def update_timer(self): 
     self.runtime = "%d:%02d" % (self.now/60,self.now % 60) 
     self.lcdNumber.display(self.runtime) 

    def tick_timer(self): 
     self.now += 1 
     self.update_timer() 

    def stop_timer(self): 
     self.timer.stop 
0

Sie die QTimer als Membervariable haben müssen ...

statt QtCore.QTimer.start (stop | timeout) es sein sollte self.timer. ...

Beispiel:

self.timer = QtCore.QTimer() 
self.timer.start() 
self.timer.stop() 
+0

Muss ich einfügen müssen 'self.timer = QtCore.QTimer() 'in jeder Funktion oder nur in einer? Im Moment befindet sich diese Zeile nur in der start_timer-Funktion und die anderen Funktionen beschweren sich darüber: AttributeError: 'MainWindow' -Objekt hat kein Attribut 'timer' –

+0

nein, Sie brauchen dies nur in der '__init__' -Funktion – Zaiborg

0

Update: Jetzt funktioniert der Zähler im Prinzip, leider sind die "Sekunden" des Timers zu kurz. Irgendwelche Vorschläge, wie das zu beheben?

Sogar self.timer = QtCore.QTimer() funktioniert jetzt in der Funktion start_timer, ohne self.timer.timeout.connect(self.tick_timer) tat es nicht.

Danke für Ihre Hilfe!

from PyQt4 import QtCore, QtGui, uic 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     uic.loadUi('MainWindow.ui', self) 
     # Buttons 
     self.QStartButton.clicked.connect(self.start_timer) 
     self.QStopButton.clicked.connect(self.stop_timer) 

    def start_timer(self): 
     # Initialize timer 
     self.timer = QtCore.QTimer() 
     self.now = 0 
     self.timer.timeout.connect(self.tick_timer) 
     # Start timer and update display 
     self.timer.start() 
     self.update_timer() 


    def update_timer(self): 
     self.runtime = "%d:%02d" % (self.now/60,self.now % 60) 
     self.lcdNumber.display(self.runtime) 

    def tick_timer(self): 
     self.now += 1 
     self.update_timer() 

    def stop_timer(self): 
     self.timer.stop