Kalender und einige Fragen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

ich versuche gerade, in eine Oberfläche einen Kalender als Popup zu implementieren. Ich verwende dazu das Beispiel aus der Doku. Nur leider wird das Feld, in dem das ausgewählte Datum angezeigt wird, immer viel zu groß dargestellt.
Hier ein Beispielcode:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx
import wx.lib.popupctl as  pop
import wx.calendar as  cal

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Test', size=(300, 400))
        panel = wx.Panel(self)
        txt1 = wx.StaticText(panel, -1, label='Periode von:')
        txt2 = wx.StaticText(panel, -1, label='bis:')
        cld1 = DateControl(panel, -1, size=(120, 28))
        cld2 = DateControl(panel, -1, size=(120, 28))
        sizer = wx.GridBagSizer(hgap=10, vgap=10)
        sizer.Add(txt1, pos=(0, 0))
        sizer.Add(cld1, pos=(0, 1))
        sizer.Add(txt2, pos=(1, 0))
        sizer.Add(cld2, pos=(1, 1))
        panel.SetSizer(sizer)
        
class DateControl(pop.PopupControl):
    def __init__(self,*_args,**_kwargs):
        apply(pop.PopupControl.__init__,(self,) + _args,_kwargs)
        self.win = wx.Window(self,-1, pos = (0,0), style = 0)
        self.cal = cal.CalendarCtrl(self.win, -1, pos = (0,0))
        bz = self.cal.GetBestSize()
        self.win.SetSize(bz)
        self.SetPopupContent(self.win)
        self.cal.Bind(cal.EVT_CALENDAR_DAY, self.OnCalSelected)

    def OnCalSelected(self,evt):
        self.PopDown()
        date = self.cal.GetDate()
        self.SetValue('%02d.%02d.%04d' % (date.GetDay(),
                                          date.GetMonth()+1,
                                          date.GetYear()))
        evt.Skip()

    def FormatContent(self):
        txtValue = self.GetValue()
        dmy = txtValue.split('.')
        didSet = False
        if len(dmy) == 3:
            date = self.cal.GetDate()
            d = int(dmy[0])
            m = int(dmy[1]) - 1
            y = int(dmy[2])
            if d > 0 and d < 31:
                if m >= 0 and m < 12:
                    if y > 1000:
                        self.cal.SetDate(wx.DateTimeFromDMY(d,m,y))
                        didSet = True
        if not didSet:
            self.cal.SetDate(wx.DateTime_Today())
            
def main():
    app = wx.PySimpleApp()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()
Die Class "DateControl" ist aus der Demo übernommen. Die Anzeigefelder lassen sich in ihrer Größe nicht ändern. :( Wo liegt da der Fehler?
Zum Kalender habe ich noch mehr Fragen:
  • - Kann ich den Kalender auf deutsche Monatsangaben "umstellen"?
    - Wie kann ich die Kalenderwoche an einem Montag beginnen lassen?
Ich bin wie immer für jeden Hinweis dankbar.

Grüße
Mawilo

PS: Wie kann ich mit wx die Monitorauflösung (wegen der Darstellungsgröße der Fenster) ermitteln?
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Ich bin mittlerweile etwas weiter gekommen - ich verwende jetzt wx.DatePickerCtrl statt PopupControl. Nur leider kämpfe ich mit den unterschiedlichen Betriebssystemen. Und Windows (w2k) ist an dieser Stelle für meinen Geschmack einfach besser als Linux.

So sieht der Kalender jeweils aus:

Linux (Kde):
Bild
Windows:
Bild

Und unter Windows schließt sich der Kalender wieder, wenn ein Datum ausgewählt wurde - unter Linux bleibt er offen.
Unter Windows beginnt die Woche mit Montag - unter Linux mit Sonntag.

Ich lasse mich aber gerne eines besseren belehren :lol:

Mawilo
wolly
User
Beiträge: 5
Registriert: Freitag 24. Juli 2009, 11:49
Wohnort: Haan
Kontaktdaten:

Hi,
sorry, dass ich den Thread wieder ausbuddel.
Wie bekommt man denn jetzt die deutschsprachigen Ausgaben hin?
Habe leider auch bei weiterem Suchen nichts finden können..
Vielen Dank im Voraus?

lG,
Wolly
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

wx.Locale

http://wiki.wxpython.org/Internationalization

Aber dein Problem, hat doch nichts mit den Kalendern zu tun, falls doch, einer aus der wxpython-users mailing list schreibt an ner neuen/besseren DatePickerCtrl
the more they change the more they stay the same
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Dav1d hat geschrieben:...falls doch, einer aus der wxpython-users mailing list schreibt an ner neuen/besseren DatePickerCtrl
Wer (ich verfolge die wxPy mailing list nur mehr sporadisch)? Ich könnte oder würde wieder einmal auf Herrn Gavana tippen. :wink: Was er schon für die wxPython (und deren Community) (neben Herrn Dunn natürlich) alles geleistet hat, ist schon einzigartig. Hut ab. 8)
wolly
User
Beiträge: 5
Registriert: Freitag 24. Juli 2009, 11:49
Wohnort: Haan
Kontaktdaten:

Hi nochmal,
ob das Problem mit dem eigentliche calendar zu tun, kann ich als Anfänger noch nicht mal beantworten.
Interessant finde ich nur, dass dieses Phänomen beim DatePickerCtrl nicht auftritt. Da ist alles schön "eingedeutscht".

LG, Wolly
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

@wolly, jedes widget sollte sich der Lokale anpassen

@francesco, ka wers war, aber weder Andrea Gavana noch Robin Dunn (btw. hat Robin Dunn wxPython "gegründet" und er ist eig. jeden Tag (gegen Abend (UTC+1) online im IRC)
the more they change the more they stay the same
Antworten