PyGTK - Calendar 类

  • 简述

    PyGTK 工具包中的日历小部件显示一个简单的日历,一次显示一个月视图。默认情况下会显示用于更改月份和年份的导航控件。可以适当地配置显示选项。
    month 属性的值在 0 到 11 之间,date 属性的值在 1 到 31 之间。
    有一个简单的构造函数来创建一个 gtk.Calendar 对象 -
    
    cal = gtk.Calendar()
    
    默认显示样式显示当前月份和年份以及日期名称。
    gtk.Calendar 类具有以下方法 -
    • Calendar.select_month(mm,yy) — 这会将日历显示更改为指定的mmyy.
    • Calendar.select_day(dd) — 这会选择指定的dd在日历上的值介于 1 和 31 之间时。如果dd为 0 则删除当前日期选择。
    • Calendar.display_options() — 这会将日历显示选项设置为指定的值flags. 可能的显示选项是以下各项的组合:
    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() — 这会检索日历的当前年、月和选定的天数作为元组(年、月、日)。
    gtk.Calendar 小部件发出以下信号 -
    day-selected 当用户或以编程方式选择一天时,会发出此消息。
    month-changed 当日历月以编程方式或由用户更改时发出。
    next-month 这在用户单击日历标题中的“next-month ”导航控件时发出。
    next-year 当用户单击日历标题中的“next-year”导航控件时,会发出此消息。
    prev-month 当用户单击日历标题中的“prev-month”导航控件时,会发出此消息。
    prev-year 当用户单击日历标题中的“prev-year ”导航控件时,会发出此消息。
    在下面的例子中,一个 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.Moognment(0.5, 0.5, 0, 0)
          halign1.add(self.cal)
          
          self.cal.set_display_options(0)
          valign = gtk.Moognment(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.Moognment(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()
    
    上面的代码将生成以下输出 -
    日历演示