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()

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?
Grüße
Mawilo
PS: Wie kann ich mit wx die Monitorauflösung (wegen der Darstellungsgröße der Fenster) ermitteln?