Seite 1 von 1
Markieren nur eines Tages bei wx.lib.calendar.Calendar
Verfasst: Donnerstag 27. Dezember 2007, 00:34
von Blauer Fasan
So, frohe Weihnachten wünsche ich allen Python-Helfern hier im Forum!
Nun mal zu meinem Problem: Ich programmiere mir gerade einen Software, die mir hilft meine Termine in Hinsicht auf die Schule zu organisieren, also Hausaufgaben, Klausuren und Präsentation.
Hierfür habe ich das wx-Modul wx.lib.calendar.Calendar benutzt. Wenn ein Termin an einem Tag angelegt wird, soll dieser Tag im Kalendar blau "markiert" werden. Nun bietet das Modul keine Methode á la SetDayColor(), sondern nur, dass ich sagen kann, dass generell der 24.12. markiert sein soll. Ich habe es soweit hinbekommen, dass ich einen Termin am 07.01.2008 anlege, leider ist es so, dass dann auch der 07.01.2009 usw markiert wird.
Das ist so aber nicht wie es sein sollte.
Hätte jemand eine Idee, wie ich mein Ziel erreichen kann? Gibt es die Möglichkeit so eine Funktion selbst zu schreiben?
Bitte um schnellstmögliche Hilfe. Danke schon einmal im Voraus!

Verfasst: Donnerstag 27. Dezember 2007, 12:40
von HWK
Das hier hilft evtl. weiter:
http://www.daniweb.com/code/printsnippet741.html.
Hilfreich könnte auch folgendes sein:
MfG
HWK
Re: Markieren nur eines Tages bei wx.lib.calendar.Calendar
Verfasst: Donnerstag 27. Dezember 2007, 13:58
von gerold
Blauer Fasan hat geschrieben:Gibt es die Möglichkeit so eine Funktion selbst zu schreiben?
Hallo Blauer Fasan!
Am Besten, du legst dir in deinem Prgrammordner eine Kopie der Datei *C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\lib\calendar.py* an. Nenne diese z.B. *extcalendar.py* und ändere den Code des Kalenders so ab, dass dieser deine gewünschte Funktion erfüllt.
Das ist nicht einfach und wird viele Stunden -- wenn nicht sogar Tage -- dauern, aber man lernt ziemlich viel dabei. Besonders darüber, wie man mit dem DeviceContext zeichnet und damit eigene Widgets erstellen kann.
mfg
Gerold

Verfasst: Donnerstag 27. Dezember 2007, 14:07
von Blauer Fasan
Also erstmal danke für die Antworten!
Zu HWK:
Diese Quelle hatte ich auch schon gefunden, leider wird dort auch nur mit der Funktion gearbeitet mit der man die Feiertage markiert, also jeden 24.12 in jedem Jahr.
Was meinst du mit "dir(wx.lib.calendar.Calendar)" ?
Zu GP:
Ok, das werde ich wohl versuchen müssen, hoffentlich dauert es nicht allzu lange, denn so viel Zeit werde ich nicht haben.
Aber vielen Dank für die Antworten, wenn jemand schon mal ein ähnliches Problem hatte, kann er ja ggf. sagen, wie man den Code von Calendar.py abändern muss.
Gruß euer Blauer Fasan
Verfasst: Donnerstag 27. Dezember 2007, 14:48
von BlackJack
HWK meinte Du solltest Dir mal die Attribute von `wx.lib.calendar.Calendar` anschauen. Und vielleicht die Doku zur `dir()`-Funktion.

Verfasst: Donnerstag 27. Dezember 2007, 15:15
von HWK
BlackJack hat geschrieben:HWK meinte Du solltest Dir mal die Attribute von `wx.lib.calendar.Calendar` anschauen. Und vielleicht die Doku zur `dir()`-Funktion.

Ja, genau!
Blauer Fasan hat geschrieben:Diese Quelle hatte ich auch schon gefunden, leider wird dort auch nur mit der Funktion gearbeitet mit der man die Feiertage markiert, also jeden 24.12 in jedem Jahr.
Jeder Monat wird aber getrennt dargestellt. Entsprechend ginge dies natürlich auch für jedes Jahr. Du bestimmst also in ResetDisplay() aktuelles Jahr und Monat und suchst aus Deiner Terminliste die entsprechenden Termine heraus. Diese markierst Du dann.
MfG
HWK
Verfasst: Donnerstag 27. Dezember 2007, 16:44
von Blauer Fasan
Also das mit dem aktuellen Jahr verstehe ich ja, aber bei den Terminen, welche ja in einem Dictionary gespeichert sind gibt es ja nur die Monate. Soll ich also ein Dictionary anlegen, welche als key das Jahr und als value den Monat beinhaltet?
Oder wie sollte das mit dem aktuellen Jahr gelöst werden. Entschuldige, wenn ich Dich oder die genannte Quelle falsch verstehe.
Blauer Fasan
Verfasst: Donnerstag 27. Dezember 2007, 20:06
von HWK
Ich würde als key ein datetime.date-Object nehmen und als value die Bedeutung des Termins. Damit ist der key ein eindeutiges Datum.
MfG
HWK
Verfasst: Donnerstag 27. Dezember 2007, 20:45
von Blauer Fasan
Ich weiß nicht, ob Du mich falsch verstehst oder ich Dich, aber könntest Du mir deine Lösung bitte etwas näher erläutern?
Ich habe ein Dictionary mit Daten als key (typ:: datetime.time) und als value eine "Bedeutung" (inwiefern Bedeutung, markiert oder nicht markiert?). Aber inwiefern soll mir das weiterhelfen?
Jeder Monat wird aber getrennt dargestellt. Entsprechend ginge dies natürlich auch für jedes Jahr. Du bestimmst also in ResetDisplay() aktuelles Jahr und Monat und suchst aus Deiner Terminliste die entsprechenden Termine heraus. Diese markierst Du dann.
Die Frage ist doch, wie ich diese markieren soll, ich kann ja nicht einfach sagen markiere das und das Datum, sondern ich kann dieses Datum nur als "holiday" kennzeichnen, somit würde es dann als solches gekennzeichnet werden.
Es kann sein, dass ich DIch falsch verstehe, wenn dies der Fall sein sollte, könntest du vielleicht mit etwas Code nachhelfen, aber nur wenn Du Zeit und Lust dazu hast.
Gruß BF
Verfasst: Donnerstag 27. Dezember 2007, 21:31
von HWK
Nur einmal ganz schnell zusammengehackt. Für's Verständnis reicht es aber hoffentlich. Ich habe dazu das Beispiel im Link minimal angepasst. Schau Dir hierzu die Zeilen mit ## an:
http://paste.pocoo.org/show/17954/
MfG
HWK
Verfasst: Donnerstag 27. Dezember 2007, 23:25
von Blauer Fasan