Виджет Календарь в наборе инструментов PyGTK отображает простой календарь с просмотром одного месяца за раз. Элементы управления для изменения месяца и года отображаются по умолчанию. Параметры отображения могут быть настроены соответствующим образом.
Значение свойства месяца находится в диапазоне от 0 до 11, а свойство даты — от 1 до 31.
Существует простой конструктор для создания объекта gtk.Calendar —
cal = gtk.Calendar()
Стиль отображения по умолчанию показывает текущий месяц и год, а также названия дней.
Класс gtk.Calendar имеет следующие методы —
-
Calendar.select_month (mm, yy) — изменяет отображение календаря на указанные мм и гг .
-
Calendar.select_day (dd) — выбирает указанный dd в календаре, когда он имеет значение от 1 до 31. Если dd равно 0, выбор текущего дня будет удален.
-
Calendar.display_options () — устанавливает для параметров отображения календаря значение, указанное флагами . Возможные варианты отображения являются комбинацией:
Calendar.select_month (mm, yy) — изменяет отображение календаря на указанные мм и гг .
Calendar.select_day (dd) — выбирает указанный dd в календаре, когда он имеет значение от 1 до 31. Если dd равно 0, выбор текущего дня будет удален.
Calendar.display_options () — устанавливает для параметров отображения календаря значение, указанное флагами . Возможные варианты отображения являются комбинацией:
gtk.CALENDAR_SHOW_HEADING | Указывает, что должны отображаться месяц и год. |
gtk.CALENDAR_SHOW_DAY_NAMES | Указывает, что должны присутствовать описания трех буквенных дней. |
gtk.CALENDAR_NO_MONTH_CHANGE | Запрещает пользователю переключать месяцы с календарем. |
gtk.CALENDAR_SHOW_WEEK_NUMBERS | Отображает номера каждой недели текущего года в левой части календаря. |
gtk.CALENDAR_WEEK_START_MONDAY | Начинает календарную неделю в понедельник вместо воскресенья по умолчанию. |
-
Calendar.get_date () — извлекает текущий год, месяц и выбранные номера календаря в виде кортежа (год, месяц, день).
Calendar.get_date () — извлекает текущий год, месяц и выбранные номера календаря в виде кортежа (год, месяц, день).
Виджет gtk.Calendar излучает следующие сигналы:
день выбран | Это излучается, когда день выбирается пользователем или программно. |
месяц изменились | Это испускается, когда календарный месяц изменяется программно или пользователем. |
следующий месяц | Это происходит, когда пользователь щелкает элемент управления «следующий месяц» в заголовке календаря. |
в следующем году | Это происходит, когда пользователь щелкает элемент управления «следующий год» в заголовке календаря. |
пред-месяц | Это происходит, когда пользователь щелкает элемент управления «предыдущий месяц» в заголовке календаря. |
предыдущий год | Это происходит, когда пользователь щелкает элемент управления «предыдущий год» в заголовке календаря. |
В следующем примере элемент управления gtk.Calendar и четыре кнопки размещаются в окне верхнего уровня.
При нажатии кнопки «заголовок» параметры отображения календаря устанавливаются на SHOW_HEADING —
def heading(self, widget): self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING)
Когда пользователь нажимает кнопку «имя дня», обратный вызов устанавливает параметры отображения на SHOW_DAY_NAMES —
def dayname(self, widget): self.cal.set_display_options(gtk.CALENDAR_SHOW_DAY_NAMES)
Обе опции дисплея активируются при нажатии кнопки «обе». Начнем с того, что все флаги параметров отображения будут удалены, установив его в 0.
self.cal.set_display_options(0)
Кнопка «Установить» выскакивает в окне сообщения, отображающего текущую отмеченную дату.
tp = self.cal.get_date() str1 = str(tp[0]) str2 = str(tp[1]+1) str3 = str(tp[2]) label = gtk.Label("Date selected:"+str3+"-"+str2+"-"+str1) dialog.vbox.add(label) label.show()
пример
Соблюдайте следующий код —
import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title("Calendar Demo") self.set_size_request(300, 200) self.set_position(gtk.WIN_POS_CENTER) vbox = gtk.VBox(False, 5) self.cal = gtk.Calendar() halign1 = gtk.Alignment(0.5, 0.5, 0, 0) halign1.add(self.cal) self.cal.set_display_options(0) valign = gtk.Alignment(0, 1, 0, 0) vbox.pack_start(halign1) self.btn1 = gtk.Button("set") self.btn2 = gtk.Button("heading") self.btn3 = gtk.Button("day name") self.btn4 = gtk.Button("Both") hbox = gtk.HBox(True, 3) hbox.add(self.btn1) hbox.add(self.btn2) hbox.add(self.btn3) hbox.add(self.btn4) halign = gtk.Alignment(0.5, 0.5, 0, 0) halign.add(hbox) vbox.pack_start(halign, False, True, 10) self.add(vbox) self.btn1.connect("clicked", self.selectdate) self.btn2.connect("clicked", self.heading) self.btn3.connect("clicked", self.dayname) self.btn4.connect("clicked", self.bothflags) self.connect("destroy", gtk.main_quit) self.show_all() def heading(self, widget): self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING) def dayname(self, widget): self.cal.set_display_options(gtk.CALENDAR_SHOW_DAY_NAMES) def bothflags(self, widget): self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING|gtk.CALENDAR_SHOW_DAY_NAMES) def selectdate(self, widget): tp = self.cal.get_date() dialog = gtk.Dialog("My dialog", self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) str1 = str(tp[0]) str2 = str(tp[1]+1) str3 = str(tp[2]) label = gtk.Label("Date selected:"+str3+"-"+str2+"-"+str1) dialog.vbox.add(label) label.show() res = dialog.run() dialog.destroy() PyApp() gtk.main()
Приведенный выше код сгенерирует следующий вывод: