Учебники

PyGTK — Календарный класс

Виджет Календарь в наборе инструментов 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()

Приведенный выше код сгенерирует следующий вывод: