воскресенье, 8 января 2012 г.

Виджет выбора даты (GTK)

В стандартном наборе виджетов GTK+ 2.xx нет управляемого виджета для вызова даты. Виджет gtk.Calendar нуждается в контейне верхнего уровня. В процессе создания аналога TDateEdit из библиотеки RxLib был создан следующий класс реализующий часть нужного мне функционала :


class CalendarBox(gtk.Dialog):
    sel_date=None

    def __close__(self,widget):
     self.response(gtk.RESPONSE_CLOSE)

    def __on_click(self,widget):
      year, month, day=self.calendar.get_date()
      self.sel_date=str(day).rjust(2,'0')+'.'+str(month+1).rjust(2,'0')+'.'+str(year)
      self.__close__(widget)

    def __calendar_click(self,widget):
      self.__on_click(widget)
    
    def get_data(self):
      return self.sel_date

    def __init__(self):
      super(CalendarBox,self).__init__()
      self.set_decorated(False)
      self.calendar=gtk.Calendar()
      self.vbox.pack_start(self.calendar,False,True,4)
      self.calendar.connect('day-selected-double-click',self.__calendar_click)
      bt1=gtk.Button('Принять')
      bt2=gtk.Button('Закрыть')
      bt1.connect('clicked',self.__on_click)
      bt2.connect('clicked',self.__close__)
      self.action_area.pack_start(bt1,False,True,4)
      self.action_area.pack_start(bt2,False,True,4)
      self.show_all()
Что данный код умеет делать ? показывает окно выбора даты. Двойной клик на дате является аналогом нажатия кнопки принять, тоесть выбирает дату.
Пример использования :
     cl=CalendarBox()
     cl.run()
     text=cl.get_data() # получение выбранной даты в String 
     cl.destroy()

Комментариев нет:

Отправить комментарий