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:
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 ...
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ß