Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Mi Sep 08, 2010 19:27

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: simple reminder
BeitragVerfasst: Di Jan 08, 2008 05:10 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
Hallo,

ja ich weiß... es gibt sowas schon zu Hauf. Aber ich habe mich trotzdem rangesetzt und heute einen "Reminder" geschrieben, also ein Programm das kleine "Notizzettelchen" auf den Desktop packt, wenn etwas ansteht.

Ich habe es gerade soweit das es benutzbar ist. Eintraege sind erstell- und loeschbar, aber noch nicht editierbar. Es muss im Moment noch mindestens ein Eintrag vorhanden sein, damit das Programm ueberhaupt startet (dieser wird Anfangs automatisch erstellt, wenn noch keine Datenbank vorliegt). Die Eintraege selbst sind in gepickleter Form unter <HEIMVERZEICHNISS>\.reminderdb zu finden. Bisher lese ich nur die Umgebungsvariablen von Windows aus, Linux werde ich morgen oder so nachtragen.

Entwickelt mit Python 2.5.1 und wxPython 2.8

Alles weitere sollte schnell rauszufinden sein, indem man das Programm einfach mal ausfuehrt ;)

Bitteschoen (v0.2.5 development snap vom 10.01.2008):
http://paste.pocoo.org/show/20403/


Gruesse
NKoehring

PS: Ich bitte wie immer um Kritik und Verbesserungsvorschlaege ;)

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Zuletzt geändert von nkoehring am Do Jan 10, 2008 07:48, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 10:49 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13893
Komisch, ich dachte Windows hat so etwas wie ``%HOME%``, so dass man nicht den Pfad selbst zusammensetzen muss.

_________________
My god, it's full of CARs!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 11:02 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
Leonidas hat geschrieben:
Komisch, ich dachte Windows hat so etwas wie ``%HOME%``, so dass man nicht den Pfad selbst zusammensetzen muss.
Also wenn, dann steht es nicht in os.environ :(

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 11:50 
User
Benutzeravatar

Registriert: Mo Nov 20, 2006 16:48
Beiträge: 716
Wohnort: formerly known as mkallas
Code:
if  now() >= date-daysbefore and now() <= date:

date-daysbefore wirkt für mich wie ein Name.

Code:
self.date = date[:4]+'-'+date[4:6]+'-'+date[6:]+" ("+tage+")"

finde ich so übersichtlicher:
Code:
self.date = '%s-%s-%s (%s)' % (date[:4], date[4:6], date[6:], tage)

ansonsten fände ich auch hier Leerzeichen hilfreich.

_________________
Ich liebe Freie Software!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 11:58 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13893
nkoehring hat geschrieben:
Also wenn, dann steht es nicht in os.environ :(

Du kannst ``os.path.expanduser('~/pfad')`` verwenden.

_________________
My god, it's full of CARs!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 12:35 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
Leonidas hat geschrieben:
Du kannst ``os.path.expanduser('~/pfad')`` verwenden.
Oh, das ist natuerlich besser, danke Leonidas :)


mkallas hat geschrieben:
Code:
if  now() >= date-daysbefore and now() <= date:

date-daysbefore wirkt f�r mich wie ein Name.
Ja dann zauber ich mal ein paar Leerzeichen dazwischen :oops:


mkallas hat geschrieben:
Code:
self.date = date[:4]+'-'+date[4:6]+'-'+date[6:]+" ("+tage+")"

finde ich so �bersichtlicher:
Code:
self.date = '%s-%s-%s (%s)' % (date[:4], date[4:6], date[6:], tage)

ansonsten f�nde ich auch hier Leerzeichen hilfreich.
Weißt du was... das mach ich einfach ganz anders ;)
Code:
self.date = time.strftime( "%Y-%m-%d", time.strptime(date, "%Y%m%d") )
self.date += " (%s)" %tage
size = wx.Size(self.fullwidth, self.fullheight)


----

Nachher lade ich die aktuelle Version hoch... diese bietet:
  • mehr Konfigurationsmoeglichkeiten (wenn auch noch im Quelltext)
  • ein paar Bugfixes
  • an manchen Stellen etwas schoeneren Code ;)


Gruß
NKoehring

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 15:25 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
Ehm... ich wuerde gern vernuenftig mit dem Datum rechnen... ich koennte schwoeren, es gab hier dazu mal was im Forum, aber ich find es gerade nicht.

Gibt es ein Modul, dass vernuenftige Moeglichkeiten bietet, mit Daten zu rechnen?
Also zB "2008-01-03" - 5 Tage = "2007-12-29" ...

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 15:50 
User
Benutzeravatar

Registriert: Mo Nov 20, 2006 16:48
Beiträge: 716
Wohnort: formerly known as mkallas
nkoehring hat geschrieben:
Gibt es ein Modul, dass vernuenftige Moeglichkeiten bietet, mit Daten zu rechnen?

Vielleicht datetime.timedelta() ?

_________________
Ich liebe Freie Software!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 16:22 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
Ah das ist genau was ich brauche! Danke mkallas :D

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 16:32 
User

Registriert: Sa Sep 23, 2006 00:05
Beiträge: 1454
Wohnort: ja
timedelta ist 'ne feine Sache, ja. Hätte ich gern (mitsamt Python) vor vielen Jahren schon gehabt ;)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 18:43 
Administrator
Benutzeravatar

Registriert: Mo Mär 20, 2006 16:29
Beiträge: 1591
Wohnort: Die aufstrebende Universitätsstadt bei München
Leonidas hat geschrieben:
Komisch, ich dachte Windows hat so etwas wie ``%HOME%``, so dass man nicht den Pfad selbst zusammensetzen muss.


Evl. %USERPROFILE%?

_________________
Lieber Vim 7 als Windows 7.

http://pythonic.pocoo.org/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 08, 2008 22:50 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
birkenfeld hat geschrieben:
Leonidas hat geschrieben:
Komisch, ich dachte Windows hat so etwas wie ``%HOME%``, so dass man nicht den Pfad selbst zusammensetzen muss.


Evl. %USERPROFILE%?


Hallo birkenfeld,

ja diese Umgebungsvariable gibt es - jedenfalls in Vista.


Ansonsten hier noch eine Aktualisierte Version des Reminders

Gruß
NKoehring

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Nach oben
 Profil  
 
 Betreff des Beitrags: TADA!
BeitragVerfasst: Mi Jan 09, 2008 07:41 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
Nach vielen Stunden des Programmierens moechte ich nun hier die Freigabe des Reminders v0.2 kund tun!

http://paste.pocoo.org/show/20242/



Edit: Hab ich doch glatt vergessen, den Auto-Refresh einzubauen. :oops:
Wer dieses Feature schon jetzt haben und testen moechte, muss nur die Klasse App ersetzen:

Code:
class App(wx.App):
    def OnInit(self):
        self.SetAppName("Reminder")
       
        # auto refresh
        self.refresh_timer = wx.Timer()
        self.Bind(wx.EVT_TIMER, self.auto_refresh)
        self.refresh_timer.Start(600000)
       
        # this is needed for quick identification of the current selected note
        # the frame sets it after the mouse entered it
        # then it become a dictionary like
        # {"date": 20080110, "id": 0, "note": "foo and bar...", "daysbefore": 7}
        self.current_note = None
        self.note_frames = list()
       
        # we need IDs for the context menu
        # new note, edit note, delete note, exit program
        self.menu_ids = dict()
        self.menu_ids["new"] = wx.NewId()
        self.menu_ids["edit"] = wx.NewId()
        self.menu_ids["delete"] = wx.NewId()
        self.menu_ids["refresh"] = wx.NewId()
        self.menu_ids["exit"] = wx.NewId()
        self.menu = wx.Menu()
        self.menu.Append(self.menu_ids["new"], "New Note")
        self.menu.Append(self.menu_ids["edit"], "Edit Note")
        self.menu.Append(self.menu_ids["delete"], "Delete Note")
        self.menu.AppendSeparator()
        self.menu.Append(self.menu_ids["refresh"], "Recreate All")
        self.menu.Append(self.menu_ids["exit"], "Exit Program")
       
        self.menu.Bind(wx.EVT_MENU, self.on_click_menu)
       
        return True
       
    def on_click_menu(self, evt):
        id = evt.GetId()
        if id == self.menu_ids["new"]:
            NoteCreateFrame().Show()
           
        elif id == self.menu_ids["edit"]:
            NoteEditFrame(self.current_note).Show()
           
        elif id == self.menu_ids["delete"]:
            ident = self.current_note.ident
            date = int( ident["date"].isoformat().replace("-", "") )
            reminders.delete_note(date, ident["id"])
            self.full_refresh()
           
        elif id == self.menu_ids["refresh"]:
            self.full_refresh()
           
        elif id == self.menu_ids["exit"]: self.ExitMainLoop()
           
    def auto_refresh(self, evt):
        """ triggers a full refresh if the day has changed """
        print "autorefreshing..."
        if hasattr(self, "last_date"):
            if self.last_date != now(): self.full_refresh()
               
        self.last_date = now()
           
    def full_refresh(self):
        """ a full refresh means: close, delete and rebuild all frames """
        for frame in self.note_frames: frame.Close()
        self.note_frames = list()
        self.current_note = None
        reminders.create_frames()

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 09, 2008 21:05 
User

Registriert: So Jan 01, 2006 21:12
Beiträge: 196
Wohnort: aus dem hohen Norden....
Hallo nkoehring,

hab´s mal unter XP laufen lassen. Ich kann Deinen Reminder fast gar nicht sehen. Es ist etwa die Hälfte des Datums zu sehen. Habe mal als Test die Taskleisten-Fixierung bei mir aufgehoben. Das hat nicht´s gebracht. Aber es öffnet sich vollständig wenn ich mit der Maus drübersteuer.

Sieht soweit ganz gut aus. Obwohl ich Transparenz lieber mag.

Hab mit der neuen App getestet.

Gruß Andy


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 09, 2008 22:35 
User
Benutzeravatar

Registriert: Mi Feb 07, 2007 18:37
Beiträge: 543
Wohnort: naehe Halle/Saale
Hi Andy,

ja das Problem was du hast fand ich auch erst bei nem Bekannten. Ich hatte naemlich nicht bedacht, dass manche Leute die Taskleiste ja *nicht* automatisch in den Hintergrund rutschen lassen...

Stellst du sie also auf "automatisch im Hintergrund", dann passt das schon. Freilich ist das nicht die optimale Loesung... aber mit ein bissl Gedult und Fantasie kriege ich das schon hin ;)

Danke jedenfalls fuer deine Nachricht.

Gruß
NKoehring

_________________
~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7L ... RAPa2XsMr2


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Andyh, MSN [Bot], NilsV


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de