tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
1562
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ruNN0r ruNN0r ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    193
    hi,
    ich bin relativ neu in der Python Programmierung und habe mich schonmal bis zu den grafischen Benutzeroberflächen vorgearbeitet.
    ich möchte nun einen Prozessen "Pausieren" und nach *5*sec weiterlaufen lassen.

    Beispiel:
    PHP-Code:
    print("a")
    time.sleep(5)
    print(
    "b"
    Alles super!
    Jedoch unter der grafischen Benutzeroberfläche klappt das nicht so wie ich möchte:
    PHP-Code:
    #Ausschnittbeginn
    label_pumpe1 ["text"] = txt_wasserpumpe"Ein"
    label6 ["text"] = "Wasserpumpe Aktiviert. Heizungspumpe startet in 30 sec."
    time.sleep(30)
    label_pumpe2 ["text"] = txt_heizpumpe"Ein"
    #Ausschnittende 
    Jedoch das klappt nicht Wenn ich auf meinen Startbutton Klicke Arbeitet der zwar, wartet die 30sec ab, dann erst schreibt er alles auf einmal rein. Nicht so wie ich will. Erst soll label_pumpe1 und label6 geschrieben werden dann 30sec Pause dann label_pumpe2

    Vielen Dank im Vorraus.
     

  2. #2
    Avatar von Raubkopierer
    Raubkopierer Raubkopierer ist offline Mitglied Diamant
    Registriert seit
    Feb 2007
    Ort
    Saultitz (Sachsen)
    Beiträge
    1.700
    Blog-Einträge
    7
    Welches Toolkit benutzt du für die grafische Nutzerobrerfläche?
    Diese verwenden meist eine eigene Mainloop, die das Zeichnen des Interfaces verwaltet und abstimmt. Das heißt Sachen wie wann das Display neu gezeichnet werden muss etc. Wenn du nun in einer Methode sleep benutzt schläft das komplette Programm und somit auch das Interface. Das bedeutet keine Redraws, keine Nutzereingaben etc. . Für den Nutzer sieht es so aus als hätte die Anwendung sich aufgehangen. Daher stellen die meisten Toolkits in ihren Mainloops eigene Timer bereit die man für solche Aufgaben nutzen sollte um sleep zu vermeiden.
     
    Albert Einstein sagte einmal:
    Es gibt 2 Dinge die unendlich sind: Das Universum und die Dummheit der Menschen. Beim Ersten bin ich mir allerdings nicht ganz sicher.

    Stoppt die Vorratsdatenspeicherung!

  3. #3
    ruNN0r ruNN0r ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    193
    Super. Besten Dank!
    Also ich habe mich mal weiter schlau gemacht auf deine Bemerkung und es hin bekommen.
    Zu deiner Frage: Tkinter
    Ist momentan alles für die Schule daher nur die Standart imports

    Meine Lösung:
    vor das sleep -> main.update_idletasks()
    wobei "main" -> "main = tkinter.Tk()"

    Also so:
    PHP-Code:
    import time
    main 
    tkinter.Tk()
    main.update_idletasks()
    sleep(5
    Wenn es euch nicht stört habe ich ncoh weitere Fragen

    Weiteres Problem ich habe die Funktion test() und brennerset() nun will ich in test() brennerset() ausführen. Das geht aber nicht.
    Hier die Brennerset():
    PHP-Code:
    def brennerset():
        if 
    pumpe_wasser_on==or pumpe_heiz_on==1:
            
    brenner=int(1)#Brenner einschalten
            
    label_brenner ["text"] = txt_brenner"Ein"#Visuelle Ausgabe
        
    else:
            
    brenner=int(0)
            
    label_brenner ["text"] = txt_brenner"Aus"
        
    return brenner 
    Also der Text wird nicht geschrieben! Ich führe die ganz normal mit "brennerset()" aus. Und der Wert wird auch nicht ausgegeben... wenn ich "print(brenner)" eingebe sagt der mir nen fehler "local variable 'brenner' ****".

    Nächste Frage wenn ich z.B. etwas ausgebe:
    label_pumpe1 = tkinter.Label(main, text=txt_wasserpumpe + "Aus")
    label_pumpe1.pack()
    und das in der Funktion ändere mit:
    label_pumpe1 ["text"] = txt_wasserpumpe, "Ein"

    wird mir das was in der txt_wasserpumpe immer in { } geschrieben? was mache ich falsch? also typen habe ich festgelegt vorher (string)

    Vielen Dank euch allen
     

  4. #4
    ruNN0r ruNN0r ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    193
    ok da mir scheinbar keiner helfen kann gebe ich das gesamte Programm mal weiter. Evtl. hilft das bei der Problemlösung
    Angehängte Dateien Angehängte Dateien
     

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von ruNN0r Beitrag anzeigen
    Weiteres Problem ich habe die Funktion test() und brennerset() nun will ich in test() brennerset() ausführen. Das geht aber nicht.
    Hier die Brennerset():
    PHP-Code:
    def brennerset():
        if 
    pumpe_wasser_on==or pumpe_heiz_on==1:
            
    brenner=int(1)#Brenner einschalten
            
    label_brenner ["text"] = txt_brenner"Ein"#Visuelle Ausgabe
        
    else:
            
    brenner=int(0)
            
    label_brenner ["text"] = txt_brenner"Aus"
        
    return brenner 
    Also der Text wird nicht geschrieben! Ich führe die ganz normal mit "brennerset()" aus. Und der Wert wird auch nicht ausgegeben... wenn ich "print(brenner)" eingebe sagt der mir nen fehler "local variable 'brenner' ****".
    Bitte kopiere die vollständige Fehlermeldung. Du verwendest vermutlich die lokale Variable "brenner" bevor dieser ein Wert zugewiesen wurde.
    Zitat Zitat von ruNN0r Beitrag anzeigen
    Nächste Frage wenn ich z.B. etwas ausgebe:
    label_pumpe1 = tkinter.Label(main, text=txt_wasserpumpe + "Aus")
    label_pumpe1.pack()
    und das in der Funktion ändere mit:
    label_pumpe1 ["text"] = txt_wasserpumpe, "Ein"

    wird mir das was in der txt_wasserpumpe immer in { } geschrieben? was mache ich falsch? also typen habe ich festgelegt vorher (string)
    Zuerst einmal, in Python mußt du keine Typen festlegen. Man kann es auch gar nicht, da sich Variablen nicht typisieren lassen. Du führst jedesmal eine (unnötige) explizite Umwandlung durch:
    Code python:
    1
    2
    3
    4
    5
    6
    
    x = str("abc") # "abc" ist bereits ein string
     
    x = "abc" # äquivalent
     
    a = int(0)  # 0 ist schon ein Integer
    a = 0 # genau das gleiche

    Dann ist das Komma nicht der Konkatenierungsoperator für Strings. Du weist den Labeln immer Tupel zu:
    Code python:
    1
    2
    3
    4
    5
    6
    
    label_pump1['text'] = txt_wasserpumpe, "Ein"
     
    label_pump1['text'] = (txt_wasserpumpe, "Ein") # äquivalent
     
    # richtig:
    label_pump1['text'] = txt_wasserpumpe + "Ein"
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    ruNN0r ruNN0r ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    193
    super. Also die {} bin ich los. Den Fehler habe ich selber gefunden. mit den + habe ich schon probiert aber habe die an einer anderen stelle vergessen somit passte das wieder nicht. Jut das ist behoben!

    Nun noch die Funktion Brenner:
    Also die Fehlermeldung Taucht nur auf wenn ich unter das brennerset() noch print(brenner) setze.

    Screen der Fehlermeldung liegt bei und das aktuelle Programm habe ich auch hochgeladen.

    Die Variable "brenner" hat für mich auch keinen vorrang. Sondern eher der Text der ausgegeben werden soll in der Funktion.
    Die Variable "brenner" ist nur da wenn ich das Programm noch weiter abändern soll für den Lehrer. Jedoch wüsste ich schon gerne wo der fehler liegt

    Besten Dank erstmal
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Python: time.sleep-unbenannt.jpg  
    Angehängte Dateien Angehängte Dateien
     

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von ruNN0r Beitrag anzeigen
    Nun noch die Funktion Brenner:
    Also die Fehlermeldung Taucht nur auf wenn ich unter das brennerset() noch print(brenner) setze.
    Die Variable "brenner" gibt es nur lokal in der Funktion brennerset(). D.h. in der Funktion test() ist die Variable natürlich nicht bekannt.
    Code python:
    1
    2
    3
    4
    
    def test():
      # ...
      brenner = brennerset() # Zeile 65
      print brenner
    Zitat Zitat von ruNN0r Beitrag anzeigen
    Screen der Fehlermeldung liegt bei und das aktuelle Programm habe ich auch hochgeladen.
    Du kannst auch einfach den Text aus der Konsole kopieren - das geht doch viel schneller als einen Screenshot zu machen, zu speichern und dann hier anzuhängen. Ganz abgesehen vom Speicherbedarf auf dem Server.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    ruNN0r ruNN0r ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    193
    Super. Besten Dank!
    Habe die letzten kleinen Probleme selber noch gelöst!

    Man schreibt sich bestimmt wieder Danke
     

Ähnliche Themen

  1. [Python] Script ( .py ) aus Python Kommandozeile (python.exe) heraus öffnen
    Von Hookah im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 0
    Letzter Beitrag: 16.12.09, 10:59
  2. Python Programmier bzw. Python Entwicklerteam gesucht
    Von ppzi im Forum Stellenangebote (entgeltlich)
    Antworten: 0
    Letzter Beitrag: 29.07.08, 11:00
  3. Time erhöhen? Wie rechnet time denn?
    Von Kalma im Forum PHP
    Antworten: 6
    Letzter Beitrag: 12.12.06, 07:37
  4. [Python] Video tutorial zu dem Python Webframework TurboGears (20 Min )
    Von Thomas Darimont im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 0
    Letzter Beitrag: 07.12.06, 13:28
  5. sleep?
    Von jccTeq im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 16.02.04, 12:21