| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
Verfasst am: Di Jan 08, 2008 04:10 Titel: simple reminder |
|
|
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/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Zuletzt bearbeitet von nkoehring am Do Jan 10, 2008 06:48, insgesamt einmal bearbeitet |
|
| Nach oben |
|
 |
Leonidas Administrator

Anmeldungsdatum: 20.06.2003 Beiträge: 13443
|
Verfasst am: Di Jan 08, 2008 09:49 Titel: |
|
|
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 |
|
 |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
|
| Nach oben |
|
 |
mkesper User

Anmeldungsdatum: 20.11.2006 Beiträge: 547 Wohnort: formerly known as mkallas
|
Verfasst am: Di Jan 08, 2008 10:50 Titel: |
|
|
| Code: (Python) | 1
| if now() >= date-daysbefore and now() <= date: |
date-daysbefore wirkt für mich wie ein Name.
| Code: (Python) | 1
| self.date = date[:4]+'-'+date[4:6]+'-'+date[6:]+" ("+tage+")" |
finde ich so übersichtlicher: | Code: (Python) | 1
| 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 |
|
 |
Leonidas Administrator

Anmeldungsdatum: 20.06.2003 Beiträge: 13443
|
Verfasst am: Di Jan 08, 2008 10:58 Titel: |
|
|
| nkoehring hat folgendes 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 |
|
 |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
Verfasst am: Di Jan 08, 2008 11:35 Titel: |
|
|
| Leonidas hat folgendes geschrieben: | | Du kannst ``os.path.expanduser('~/pfad')`` verwenden. | Oh, das ist natuerlich besser, danke Leonidas
| mkallas hat folgendes geschrieben: | | Code: (Python) | 1
| 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
| mkallas hat folgendes geschrieben: | | Code: (Python) | 1
| self.date = date[:4]+'-'+date[4:6]+'-'+date[6:]+" ("+tage+")" |
finde ich so �bersichtlicher: | Code: (Python) | 1
| 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: (Python) | 1 2 3
| 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/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2 |
|
| Nach oben |
|
 |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
|
| Nach oben |
|
 |
mkesper User

Anmeldungsdatum: 20.11.2006 Beiträge: 547 Wohnort: formerly known as mkallas
|
Verfasst am: Di Jan 08, 2008 14:50 Titel: |
|
|
| nkoehring hat folgendes geschrieben: | | Gibt es ein Modul, dass vernuenftige Moeglichkeiten bietet, mit Daten zu rechnen? |
Vielleicht datetime.timedelta() ? _________________ Ich liebe Freie Software! |
|
| Nach oben |
|
 |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
|
| Nach oben |
|
 |
Y0Gi User
Anmeldungsdatum: 22.09.2006 Beiträge: 1454 Wohnort: ja
|
Verfasst am: Di Jan 08, 2008 15:32 Titel: |
|
|
timedelta ist 'ne feine Sache, ja. Hätte ich gern (mitsamt Python) vor vielen Jahren schon gehabt  |
|
| Nach oben |
|
 |
birkenfeld Administrator

Anmeldungsdatum: 20.03.2006 Beiträge: 1592 Wohnort: Die aufstrebende Universitätsstadt bei München
|
Verfasst am: Di Jan 08, 2008 17:43 Titel: |
|
|
| Leonidas hat folgendes 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 |
|
 |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
|
| Nach oben |
|
 |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
Verfasst am: Mi Jan 09, 2008 06:41 Titel: TADA! |
|
|
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.
Wer dieses Feature schon jetzt haben und testen moechte, muss nur die Klasse App ersetzen:
| Code: (Python) | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| 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/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2 |
|
| Nach oben |
|
 |
Andy User
Anmeldungsdatum: 01.01.2006 Beiträge: 196 Wohnort: aus dem hohen Norden....
|
Verfasst am: Mi Jan 09, 2008 20:05 Titel: |
|
|
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 |
|
 |
nkoehring User

Anmeldungsdatum: 07.02.2007 Beiträge: 543 Wohnort: naehe Halle/Saale
|
|
| Nach oben |
|
 |
|