2016-05-27 20 views
0

Ich mache sehr grundlegende PyQt, also bitte entschuldigen Sie die schlechte Optimierung und fehlende Klassenorientierung.LCD-Display möchte die Eingabe nicht aktualisieren (zeige nicht an, was ich sage, um es anzuzeigen)

Ich versuche, einen Timer in PyQt zu machen. Ich habe 3 LCDs auf der Benutzeroberfläche, eine Stunde LCD (hourLcd), eine Minute LCD (minuteLcd) und einem zweiten LCD (secondLcd)

import sys 
import time 
from PyQt4 import QtGui 
from PyQt4 import uic 

app = QtGui.QApplication(sys.argv) 
#window = QtGui.QMainWindow() 

ui = uic.loadUi("clock.ui") 

#ui.setupUi(Window) 
ui.show() 

Dies stellt PyQt4

def hourUp(): 
    count = ui.hourLcd.value() 
    if count < 24: 
     count = count + 1 
    ui.hourLcd.display(count) 

def hourDown(): 
    count = ui.hourLcd.value() 
    if count > 0: 
     count = count - 1 
    ui.hourLcd.display(count) 

def minuteUp(): 
    count = ui.minuteLcd.value() 
    if count < 59: 
     count = count + 1 
    ui.minuteLcd.display(count) 

def minuteDown(): 
    count = ui.minuteLcd.value() 
    if count > 0: 
     count = count - 1 
    ui.minuteLcd.display(count) 

def secondUp(): 
    count = ui.secondLcd.value() 
    if count < 59: 
     count = count + 1 
    ui.secondLcd.display(count) 

def secondDown(): 
    count = ui.secondLcd.value() 
    if count > 0: 
     count = count - 1 
    ui.secondLcd.display(count) 

Dies sind die Funktionen um die UI-Schaltflächen mit Aktionen zu verbinden. z.B. Wenn Sie die Taste auf der Benutzeroberfläche drücken, wird eine zum Zähler hinzugefügt.

def start(stop): 
    loop = False 
    secondcounter = ui.secondLcd.value() 
    minutecounter = ui.minuteLcd.value() 
    hourcounter = ui.hourLcd.value() 

    while loop == False: 
     time.sleep(1) 
     secondcounter = secondcounter - 1 
     print(secondcounter) 
     ui.secondLcd.display(secondcounter) **** 

     if secondcounter == 0: 
      if minutecounter != 0: 
       minutecounter = minutecounter - 1 
       print(minutecounter) 
       ui.minuteLcd.display(minutecounter) **** 
       secondcounter = secondcounter + 59 
       ui.secondLcd.display(secondcounter) **** 

     if secondcounter == 0: 
      if minutecounter == 0: 
       if hourcounter == 0: 
        loop = True 

     if minutecounter == 0: 
      if secondcounter == 0: 
       if hourcounter != 0: 
        hourcounter = hourcounter - 1 
        print(hourcounter) 
        ui.hourLcd.display(hourcounter) **** 
        minutecounter = minutecounter + 59 
        print(minutecounter) 
        ui.minuteLcd.display(minutecounter) **** 
        secondcounter = secondcounter + 59 
        print(secondcounter) 
        ui.secondLcd.display(secondcounter) **** 

     else: 
      continue 

Der Algorithmus für die Ausführung des Timers.

Im Grunde funktioniert der Code alles perfekt. Es zählt von einer gegebenen Zeit auf 0 herunter, aber ich habe Probleme, die Ausdrucke des Codes mit der UI zu verbinden, speziell die Zeile mit den Sternen daneben. Ich verstehe nicht, warum der Code es ablehnt, die LCD - Ziffern zu aktualisieren, wenn sich die Zähler ändern (z. B. counter = counter - 1), wie es in den anderen Funktionen funktioniert.

Danke !!

Antwort

0

Eine Lösung gefunden.

while loop == False: 
    app.processEvents() #This was the line of code that I needed 
    time.sleep(1) 
    secondcounter = secondcounter - 1 
    app.processEvents() #and this 
    print(secondcounter) 
    ui.secondLcd.display(secondcounter) 

Grundsätzlich hinzufügen app.processEvents(), bevor Sie Ihre ui

nennen