hallo
hatte ein jahr python in der schule und das is auch noch lang her^^
das vorne weg^^
so meine frage:
ich will ein programm programmieren, dass mir sagt, wie viele tage es noch bis zu einem bestimmten zeitpunkt sind. also zB für einen geburtstag oder ähnliches! das programm soll mir, wenn ich es öffne, also genau sagen wie viele tage es noch bis zu nem bestimmten datum sind.
wie kann ich so etwas machen?
mfg
skunkk
Countdown Tage?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi skunkk!skunkk90 hat geschrieben:wie viele tage es noch bis zu einem bestimmten zeitpunkt sind. also zB für einen geburtstag oder ähnliches!
Mit dem ``datetime``-Modul kannst du so etwas machen:
Code: Alles auswählen
>>> import datetime
>>> dest_date = datetime.date(2007, 1, 1)
>>> today = datetime.date.today()
>>> diff = dest_date - today
>>> diff.days
70
>>>
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- skunkk90
- User
- Beiträge: 57
- Registriert: Donnerstag 1. Juni 2006, 20:38
- Wohnort: F:\Homeverzeichnis.zip
- Kontaktdaten:
hey cool danke!
nur ein problem: wie mach ich die diff.days zu nem str?
dieser fehler kommt nämlich wenn ich das in nem ScrolledText ausgeben will:
(ausgabefeld.insert(END,diff.days)
AttributeError: 'str' object has no attribute 'days'
dann habe da aber noch eine frage^^
und zwar, wie kann ich machen, dass die einstellungen für das programm geändert werden können vom benutzer?
also wenn ich das programm starte, zählt es wie programmiert einen bestimmten countdown, dieser kann dann dann jedoch von user verändert werden. und wenn das passiert, zählt das programm am nächsten programm den neuen countdown...
weisste was ich mein?
also muss da quasi noch en save oder so rein, just how?
nur ein problem: wie mach ich die diff.days zu nem str?
dieser fehler kommt nämlich wenn ich das in nem ScrolledText ausgeben will:
(ausgabefeld.insert(END,diff.days)
AttributeError: 'str' object has no attribute 'days'
dann habe da aber noch eine frage^^
und zwar, wie kann ich machen, dass die einstellungen für das programm geändert werden können vom benutzer?
also wenn ich das programm starte, zählt es wie programmiert einen bestimmten countdown, dieser kann dann dann jedoch von user verändert werden. und wenn das passiert, zählt das programm am nächsten programm den neuen countdown...
weisste was ich mein?
also muss da quasi noch en save oder so rein, just how?
Humor ist, wenn man trotzdem lacht!
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi skunkk!skunkk90 hat geschrieben:(ausgabefeld.insert(END,diff.days)
Mach das nicht -- verwende die neue Syntax, wenn du mit WX programmierst. Importiere wx so:
Code: Alles auswählen
import wx
Code: Alles auswählen
from wx import *
Code: Alles auswählen
wx.END
Siehe: http://wiki.wxpython.org/index.cgi/wxPython_Style_Guide
Das ist eine gute Anleitung für den Beginn mit wxPython. -- Auch wenn teilweise noch IDs für Menüeinträge verwendet werden.
http://wiki.wxpython.org/index.cgi/AnotherTutorial
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi skunkk!skunkk90 hat geschrieben:(ausgabefeld.insert(END,diff.days)
AttributeError: 'str' object has no attribute 'days'
Kann es sein, dass du ``diff`` mit einem String überschrieben hast, so dass es kein Objekt vom Typ ``timedelta`` mehr ist?
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- skunkk90
- User
- Beiträge: 57
- Registriert: Donnerstag 1. Juni 2006, 20:38
- Wohnort: F:\Homeverzeichnis.zip
- Kontaktdaten:
also des mit dem fehler hat sich bisher ergeben.
hatte da ein kleines durcheinander..
bisher sieht mein script so aus:
so weit so gut, nur wenn der benutzer jetzt ein neuen countdown eingeben will funzt es nicht mit der berechnung
siehe:
es geht nicht wegen der variablen
wie kann ich machen, dass er für die variablen hier die jeweiligen zahlen eingibt?
dann wäre da noch dieses save problem, so wie der script jetzt ist, soll er ja nciht bleiben, er soll nach eingabe des neuen countdown, den alten ersetzen und nach beenden des programms und wieder öffnen den neuen benutzen. das ist demnach auch meine nächste frage, wie geht das?
und jetzt mal was ganz anderes...
diese tutorials, gibt es die nicht i-wo in deutsch? die machen mich ganz kirre und das is net gut, da komm ich nur noch mehr durcheinander...
hatte python 1 jahr lang in der schule, da hatten wir gepythoned (^^) bis zu while-schleifen in Tkinters, also nicht auf eurem niveau hier... des bereue ich, aber die tutorials in englisch helfen mir nicht wirklich, weil ich es nicht verstehe...
puh^^
hatte da ein kleines durcheinander..
bisher sieht mein script so aus:
Code: Alles auswählen
from Tkinter import*
from ScrolledText import*
import datetime
hf=Tk()
frame1=Frame(hf,width=250,height=250)
frame1.pack()
hf.title("Countdown")
hf.iconbitmap('favicon.ico')
dest_date=datetime.date(2006,11,30)
today=datetime.date.today()
diff=dest_date-today
def close():
hf.destroy()
def berechne():
jahr=jahr1.get()
monat=monat1.get()
tag=tag1.get()
dest_date=datetime.date(jahr,monat,tag)
today=datetime.date.today()
diff=dest_date-today
ausgabefeld.insert(END,"Bis zum "+ str(dest_date) +" (Jahr,Monat,Tag)\nsind es noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!")
ausgabefeld=ScrolledText(frame1,width=36,height=8)
ausgabefeld.place(x=5,y=5)
closebutton=Button(frame1,text="Beenden",command=close,width=20)
closebutton.place(x=5,y=220)
ausgabefeld.insert(END,"Bis zum "+ str(dest_date) +" (Jahr,Monat,Tag)\nsind es noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!")
label1=Label(frame1,text="Countdown Einstellungen:\n( Jahr / Monat / Tag )")
label1.place(x=4,y=120)
jahr1=Entry(frame1, width=5)
jahr1.place(x=5,y=160)
monat1=Entry(frame1, width=5)
monat1.place(x=50,y=160)
tag1=Entry(frame1, width=5)
tag1.place(x=94,y=160)
berechne=Button(frame1,text="Berechne!",width=20,command=berechne)
berechne.place(x=5,y=190)
hf.mainloop()
siehe:
Code: Alles auswählen
def berechne():
jahr=jahr1.get()
monat=monat1.get()
tag=tag1.get()
dest_date=datetime.date(jahr,monat,tag)
today=datetime.date.today()
diff=dest_date-today
ausgabefeld.insert(END,"Bis zum "+ str(dest_date) +" (Jahr,Monat,Tag)\nsind es noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!")
Code: Alles auswählen
dest_date=datetime.date(jahr,monat,tag)
dann wäre da noch dieses save problem, so wie der script jetzt ist, soll er ja nciht bleiben, er soll nach eingabe des neuen countdown, den alten ersetzen und nach beenden des programms und wieder öffnen den neuen benutzen. das ist demnach auch meine nächste frage, wie geht das?
und jetzt mal was ganz anderes...
diese tutorials, gibt es die nicht i-wo in deutsch? die machen mich ganz kirre und das is net gut, da komm ich nur noch mehr durcheinander...
hatte python 1 jahr lang in der schule, da hatten wir gepythoned (^^) bis zu while-schleifen in Tkinters, also nicht auf eurem niveau hier... des bereue ich, aber die tutorials in englisch helfen mir nicht wirklich, weil ich es nicht verstehe...
puh^^
Humor ist, wenn man trotzdem lacht!
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Ich habe das Thema nach Tkinter verschoben...
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi skunkk!skunkk90 hat geschrieben:aber die tutorials in englisch helfen mir nicht wirklich, weil ich es nicht verstehe...
Es gibt auch ein paar deutsche Bücher zu Python:
- Pyton for Kids (ist aber auch für Erwachsene geeignet)
- Python Ge-Packt
- Objektorientierte-Programmierung mit Python
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- skunkk90
- User
- Beiträge: 57
- Registriert: Donnerstag 1. Juni 2006, 20:38
- Wohnort: F:\Homeverzeichnis.zip
- Kontaktdaten:
danke für den tipp.
aber jetzt nochmal zu meiner frage (ich weiss ich hatte mehr als eine ,aber ich mein die hier:)
dest_date=datetime.date(jahr,monat,tag)
jahr, monat und tag sind variablen,
so wie es auch oben im script steht, ergibt es nur fehler.
wie kann ich es ansonsten machen, dass die tage über ein eingegebenes datum erechnet werden?
aber jetzt nochmal zu meiner frage (ich weiss ich hatte mehr als eine ,aber ich mein die hier:)
dest_date=datetime.date(jahr,monat,tag)
jahr, monat und tag sind variablen,
so wie es auch oben im script steht, ergibt es nur fehler.
wie kann ich es ansonsten machen, dass die tage über ein eingegebenes datum erechnet werden?
Humor ist, wenn man trotzdem lacht!
Code: Alles auswählen
def berechne():
jahr=jahr1.get()
monat=monat1.get()
tag=tag1.get()
dest_date=datetime.date(int(jahr),int(monat),int(tag))
today=datetime.date.today()
diff=dest_date-today
ausgabefeld.insert(END,"Bis zum "+ str(dest_date) +" (Jahr,Monat,Tag)\nsind es noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!")
werden Strings ausgelesen und diese solltest du durch int()
in Integer konvertieren lassen.
Gruß,
M.
Hab den Code mal ein wenig umgebaut und die laden/speichern Sache gemacht. War nicht wirklich schwierig und mal ganz am Rande:
Gute Python Tutorials sind sehr wohl auch auf deutsch zu haben!
Alles eine Frage des Einsatzes...
Gute Python Tutorials sind sehr wohl auch auf deutsch zu haben!
Alles eine Frage des Einsatzes...
Code: Alles auswählen
from Tkinter import*
from ScrolledText import*
import datetime
import string
def close():
hf.destroy()
def berechne():
j = int(jahr1.get())
m = int(monat1.get())
t = int(tag1.get())
dest_date = datetime.date(j,m,t)
diff = dest_date - datetime.date.today()
ausgabefeld.insert(END,"Bis zum "+ str(dest_date) +" (Jahr,Monat,Tag)\nsind es noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!\n")
datei = open("time_date.txt","w+")
datei.writelines(str(j) + "." + str(m) + "." + str(t)) #Datum schreiben
datei.close()
hf=Tk()
frame1=Frame(hf,width=250,height=250)
frame1.pack()
hf.title("Countdown")
datei = open("time_date.txt","r")
zeile = datei.readline() #Datum lesen
datei.close()
temp_list = string.split(zeile,".")
jahr, monat, tag = int(temp_list[0]), int(temp_list[1]), int(temp_list[2])
dest_date = datetime.date(jahr,monat,tag)
diff = dest_date - datetime.date.today()
ausgabefeld = ScrolledText(frame1,width=36,height=8)
ausgabefeld.place(x=5,y=5)
closebutton = Button(frame1,text="Beenden",command=close,width=20)
closebutton.place(x=5,y=220)
ausgabefeld.insert(END,"Bis zum "+ str(dest_date) +" (Jahr,Monat,Tag)\nsind es noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!\n")
label1 = Label(frame1,text="Countdown Einstellungen:\n( Jahr / Monat / Tag )")
label1.place(x=4,y=120)
jahr1 = Entry(frame1, width=5)
jahr1.place(x=5,y=160)
monat1 = Entry(frame1, width=5)
monat1.place(x=50,y=160)
tag1 = Entry(frame1, width=5)
tag1.place(x=94,y=160)
berechne = Button(frame1,text="Berechne!",width=20,command=berechne)
berechne.place(x=5,y=190)
hf.mainloop()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ah, ok. Jetzt noch aus from Tkinter import * ein import Tkinter as tk machen, die Variablennamen anpassen (so wie Gerold weiter oben, nur mit wxPython geschrieben hat) und dann noch den ganzen Kram in Funktionen packen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- skunkk90
- User
- Beiträge: 57
- Registriert: Donnerstag 1. Juni 2006, 20:38
- Wohnort: F:\Homeverzeichnis.zip
- Kontaktdaten:
Code: Alles auswählen
from Tkinter import*
from ScrolledText import*
import datetime
import string
hf=Tk()
frame1=Frame(hf,width=250,height=250)
frame1.pack()
hf.title("Countdown")
hf.iconbitmap('favicon.ico')
def close():
hf.destroy()
def berechne():
jahr=jahr1.get()
monat=monat1.get()
tag=tag1.get()
dest_date=datetime.date(int(jahr),int(monat),int(tag))
today=datetime.date.today()
diff=dest_date-today
ausgabefeld.insert(END,"Bis zum "+ str(tag) + "." + str(monat) + "." + str(jahr) +" sind\nes noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!\n\n")
s=(str(tag) + "." + str(monat) + "." + str(jahr))
datei=file("cdn.dat","w")
datei.write(s)
datei.close()
ausgabefeld=ScrolledText(frame1,width=36,height=8)
ausgabefeld.place(x=5,y=5)
closebutton=Button(frame1,text="Beenden",command=close,width=20)
closebutton.place(x=5,y=220)
#
datei=file("cdn.dat","r")
zeile=datei.readlines()
datei.close()
temp_list = string.split(zeile,".")
jahr, monat, tag = int(temp_list[0]), int(temp_list[1]), int(temp_list[2])
dest_date = datetime.date(tag,monat,jahr)
diff = dest_date - datetime.date.today()
#
ausgabefeld.insert(END,"Bis zum "+ str(dest_date) +" sind\nes noch ")
ausgabefeld.insert(END, str(diff.days) +" Tage!\n\n")
label1=Label(frame1,text="Countdown Einstellungen:\n( Tag / Monat / Jahr )")
label1.place(x=4,y=120)
jahr1=Entry(frame1, width=5)
jahr1.place(x=94,y=160)
monat1=Entry(frame1, width=5)
monat1.place(x=50,y=160)
tag1=Entry(frame1, width=5)
tag1.place(x=5,y=160)
berechne=Button(frame1,text="Berechne!",width=20,command=berechne)
berechne.place(x=5,y=190)
hf.mainloop()
temp_list = string.split(zeile,".")
File "D:\Programmieren\Python\lib\string.py", line 290, in split
return s.split(sep, maxsplit)
AttributeError: 'list' object has no attribute 'split'
Humor ist, wenn man trotzdem lacht!
- skunkk90
- User
- Beiträge: 57
- Registriert: Donnerstag 1. Juni 2006, 20:38
- Wohnort: F:\Homeverzeichnis.zip
- Kontaktdaten:
das mit dem "from Tkinter import*" und "import Tkinter as Tk" kapier ich immernoch net, ich seh den unterschied net, habe es damals so beigebracht bekommen...Leonidas hat geschrieben:Ah, ok. Jetzt noch aus from Tkinter import * ein import Tkinter as tk machen, die Variablennamen anpassen (so wie Gerold weiter oben, nur mit wxPython geschrieben hat) und dann noch den ganzen Kram in Funktionen packen.
vllt kann das ja einer auf deutsch ma sagen
Humor ist, wenn man trotzdem lacht!
Kann es sein, dass du bei Ausführung des Scripts noch keine Textdatei ertstellt hast?
den Namen hast du ja bereits in cdn.txt geändert. Der Inhalt sollte folgendermassen aussehen :
2006.11.30 (ohne Zeilenumbruch!)
Dann sollte alles laufen!
Seh´s gerade, in Zeile 35 aus dem Readlines bitte ein Readline machen. das wärs dann.
den Namen hast du ja bereits in cdn.txt geändert. Der Inhalt sollte folgendermassen aussehen :
2006.11.30 (ohne Zeilenumbruch!)
Dann sollte alles laufen!
Seh´s gerade, in Zeile 35 aus dem Readlines bitte ein Readline machen. das wärs dann.