PyGTK - Lớp lịch

Tiện ích Lịch trong bộ công cụ PyGTK hiển thị một lịch đơn giản với chế độ xem một tháng tại một thời điểm. Các điều khiển điều hướng để thay đổi tháng và năm được hiển thị theo mặc định. Các tùy chọn hiển thị có thể được cấu hình phù hợp.

Giá trị của thuộc tính tháng nằm trong khoảng từ 0 đến 11 và giá trị của thuộc tính ngày là từ 1 đến 31.

Có một hàm tạo đơn giản để tạo một đối tượng gtk.Calendar -

cal = gtk.Calendar()

Kiểu hiển thị mặc định hiển thị tháng và năm hiện tại cũng như tên các ngày.

Lớp gtk.Calendar có các phương thức sau:

  • Calendar.select_month (mm, yy) - Điều này thay đổi hiển thị lịch thành được chỉ định mmyy.

  • Calendar.select_day (dd) - Tùy chọn này sẽ chọn dd trên lịch khi nó có giá trị từ 1 đến 31. Nếu dd là 0 thì lựa chọn ngày hiện tại bị xóa.

  • Calendar.display_options () - Điều này đặt các tùy chọn hiển thị lịch thành giá trị được chỉ định bởi flags. Các tùy chọn hiển thị có thể có là sự kết hợp của:

gtk.CALENDAR_SHOW_HEADING Chỉ định rằng tháng và năm sẽ được hiển thị.
gtk.CALENDAR_SHOW_DAY_NAMES Chỉ định rằng mô tả ngày bằng ba chữ cái nên có mặt.
gtk.CALENDAR_NO_MONTH_CHANGE Ngăn người dùng chuyển tháng bằng lịch.
gtk.CALENDAR_SHOW_WEEK_NUMBERS Hiển thị các số tuần của năm hiện tại, xuống phía bên trái của lịch.
gtk.CALENDAR_WEEK_START_MONDAY Bắt đầu tuần theo lịch vào Thứ Hai, thay vì Chủ Nhật mặc định.
  • Calendar.get_date () - Công cụ này truy xuất năm, tháng và số ngày hiện tại của lịch dưới dạng một bộ (năm, tháng, ngày).

Tiện ích gtk.Calendar phát ra các tín hiệu sau:

chọn ngày Điều này được phát ra khi một ngày được chọn bởi người dùng hoặc được lập trình.
tháng thay đổi Điều này được phát ra khi người dùng thay đổi tháng theo chương trình hoặc theo chương trình.
tháng tiếp theo Điều này được phát ra khi người dùng nhấp vào điều khiển điều hướng "tháng tới" trong tiêu đề lịch.
năm sau Điều này được phát ra khi người dùng nhấp vào điều khiển điều hướng "năm tới" trong tiêu đề lịch.
tháng trước Điều này được phát ra khi người dùng nhấp vào điều khiển điều hướng "tháng trước" trong tiêu đề lịch.
năm trước Điều này được phát ra khi người dùng nhấp vào điều khiển điều hướng "năm trước" trong tiêu đề lịch.

Trong ví dụ sau, điều khiển gtk.Calendar và bốn nút được đặt trong cửa sổ cấp trên cùng.

Khi nhấp vào nút 'tiêu đề', các tùy chọn hiển thị của Lịch được đặt thành SHOW_HEADING -

def heading(self, widget):
   self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING)

Khi người dùng nhấp vào nút 'tên ngày', lệnh gọi lại đặt các tùy chọn hiển thị thành SHOW_DAY_NAMES -

def dayname(self, widget):
self.cal.set_display_options(gtk.CALENDAR_SHOW_DAY_NAMES)

Cả hai tùy chọn hiển thị đều được bật khi nhấn nút 'cả hai'. Để bắt đầu, tất cả cờ của các tùy chọn hiển thị sẽ bị xóa bằng cách đặt nó thành 0.

self.cal.set_display_options(0)

Nút 'set' bật lên một hộp thông báo hiển thị ngày được đánh dấu hiện tại.

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

Thí dụ

Quan sát đoạn mã sau:

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

Đoạn mã trên sẽ tạo ra kết quả sau: