Seite 1 von 1

Wert pro Zeit

Verfasst: Samstag 6. Dezember 2008, 20:59
von silentpolygon
Hallo zusammen,

Ich habe ein echt blödes Problem. Klingt einfach aber ich krieg das nich hin bzw. ich weiss nic wie ich das machen soll...

Also Ich habe einen Wert:

Code: Alles auswählen

a = 1
Nun will ich, das sich Variable 'a' beispielsweise alle 4 Sekunden um 1 erhöht. Das Modul time sollte da ja eigentlich der richtige fundort sein. Kann da aber nix finden. Bitte HILFE!!![/code]

Verfasst: Samstag 6. Dezember 2008, 21:08
von DasIch

Code: Alles auswählen

from time import sleep
a = 0
while True:
    sleep(4)
    i += 1
;)

Schreib mal was du wirklich vorhast und was dein wirkliches Problem ist dann bekommst du auch eine wirklich brauchbare Antwort.

Verfasst: Samstag 6. Dezember 2008, 21:17
von numerix
4 Sekunden bis zum Abbruch ... :D

Code: Alles auswählen

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    i += 1
NameError: name 'i' is not defined

Verfasst: Samstag 6. Dezember 2008, 21:19
von silentpolygon
Erstmal danke für die antwort.

Ich habe Regeltechniker gelernt und will mir mit Python ein Regelkreis simulieren. Also quasi a aus dem oberen Beitrag ist das Wasser in einem Wasserbecken. Nun ist die Wassermenge, die ins Becken reinläuft b.

Nun will ich eine Anzeige haben wieviel Wasser nach Zeit X ins Becken gelaufen ist bzw. die Literzahl immer im Auge behalten. Wie ich die Anzeige mache ist mir schon klar. Nur das ganze über die Zeit steigen zu lassen wusste ich nich.

aber mal ne Frage: Schläft mit dem Befehl sleep das komplette Programm? Soll heißen wenn ich eine GUI habe, die einen EventHandler hat, "schläft" der dann auch? Hatte das Problem mal mit wxPython und twisted.

Verfasst: Samstag 6. Dezember 2008, 21:20
von silentpolygon
@numerix

Muss dann natürlich a+=1 heissen oder die Variable oben in i umbenennen oder?

Verfasst: Samstag 6. Dezember 2008, 21:31
von gerold
silentpolygon hat geschrieben:Schläft mit dem Befehl sleep das komplette Programm? Soll heißen wenn ich eine GUI habe, die einen EventHandler hat, "schläft" der dann auch? Hatte das Problem mal mit wxPython und twisted.
Hallo silentpolygon!

Mit ``sleep`` schläft der aktuelle Thread. Wenn du in deinem Programm nur einen Thread hast, dann schläft das ganze Programm.

wxPython bietet dafür den ``wx.Timer``. Der löst nach einer vorgegebenen Zeit das ``wx.EVT_TIMER``-Event aus. So etwas ist aber nie besonders genau. Deshalb löst man normalerweise mehrmals die Sekunde diesen Event aus und prüft anhand der Uhrzeit, ob eine Sekunde vergangen ist oder nicht.

mfg
Gerold
:-)

PS: Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx
import time

wx.SetDefaultPyEncoding("iso-8859-15")


class MyFrame(wx.Frame):
    
    def __init__(self, parent = None, title = "Example"):
        wx.Frame.__init__(self, parent, -1, title)
        
        panel = wx.Panel(self)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox)
        
        self.label = wx.StaticText(panel, label = "<Uhrzeit im 10-Sekundentakt>")
        vbox.Add(self.label, 0, wx.ALL, 10)
        
        self.old_time = time.time()
        
        self.timer = wx.Timer()
        self.timer.Bind(wx.EVT_TIMER, self.on_timer)
        self.timer.Start(200)
        
        panel.Fit()
        self.Fit()
    
    
    def on_timer(self, event):
        new_time = time.time()
        if new_time - self.old_time >= 10:
            self.old_time = new_time
            self.label.SetLabel(time.strftime("%H:%M:%S"))


def main():
    app = wx.PySimpleApp()
    f = MyFrame()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
.

Verfasst: Samstag 6. Dezember 2008, 22:03
von abgdf
Hallo,

das geht auch in Tkinter, z.B. so:

Code: Alles auswählen

#!/usr/bin/env python

import Tkinter
from Tkconstants import *

class myWindow:

    def __init__(self):

        self.a = 0

        self.mw = Tkinter.Tk()
        self.mw.option_add("*font", ("Arial", 15, "normal"))
        self.mw.title('Raising "a"')
        self.mw.geometry("+250+200")

        self.lab1 = Tkinter.Label(self.mw,
                                  text = 'a = ' + str(self.a))
        self.lab1.pack(padx = 100, pady = 100)

        self.btn1 = Tkinter.Button(self.mw,
                                   text = "Exit",
                                   command = self.mw.destroy)
        self.btn1.pack(padx = 10, pady = 10)

        self.mw.after(ms = 4000, func = self.raiseA)

        self.mw.mainloop()

    def raiseA(self):

        self.a += 1
        self.lab1.configure(text = 'a = ' + str(self.a))
        self.mw.after(ms = 4000, func = self.raiseA)

if __name__ == "__main__":
   app = myWindow()
Gruß