Markieren nur eines Tages bei wx.lib.calendar.Calendar

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

So, frohe Weihnachten wünsche ich allen Python-Helfern hier im Forum! :D

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! :)
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Das hier hilft evtl. weiter: http://www.daniweb.com/code/printsnippet741.html.
Hilfreich könnte auch folgendes sein:

Code: Alles auswählen

dir(wx.lib.calendar.Calendar)
MfG
HWK
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

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
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
BlackJack

HWK meinte Du solltest Dir mal die Attribute von `wx.lib.calendar.Calendar` anschauen. Und vielleicht die Doku zur `dir()`-Funktion. :-)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

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
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

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
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Ok, jetzt habe ich es hinbekommen, vielen Dank HWK!

:D :D :D :D :D :D
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Antworten