?? calendar.py
字號:
#!/usr/bin/env python# example calendar.py## Copyright (C) 1998 Cesar Miquel, Shawn T. Amundson, Mattias Gronlund# Copyright (C) 2000 Tony Gale# Copyright (C) 2001-2004 John Finlay## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.import pygtkpygtk.require('2.0')import gtk, pangoimport timeclass CalendarExample: DEF_PAD = 10 DEF_PAD_SMALL = 5 TM_YEAR_BASE = 1900 calendar_show_header = 0 calendar_show_days = 1 calendar_month_change = 2 calendar_show_week = 3 def calendar_date_to_string(self): year, month, day = self.window.get_date() mytime = time.mktime((year, month+1, day, 0, 0, 0, 0, 0, -1)) return time.strftime("%x", time.localtime(mytime)) def calendar_set_signal_strings(self, sig_str): prev_sig = self.prev_sig.get() self.prev2_sig.set_text(prev_sig) prev_sig = self.last_sig.get() self.prev_sig.set_text(prev_sig) self.last_sig.set_text(sig_str) def calendar_month_changed(self, widget): buffer = "month_changed: %s" % self.calendar_date_to_string() self.calendar_set_signal_strings(buffer) def calendar_day_selected(self, widget): buffer = "day_selected: %s" % self.calendar_date_to_string() self.calendar_set_signal_strings(buffer) def calendar_day_selected_double_click(self, widget): buffer = "day_selected_double_click: %s" buffer = buffer % self.calendar_date_to_string() self.calendar_set_signal_strings(buffer) year, month, day = self.window.get_date() if self.marked_date[day-1] == 0: self.window.mark_day(day) self.marked_date[day-1] = 1 else: self.window.unmark_day(day) self.marked_date[day-1] = 0 def calendar_prev_month(self, widget): buffer = "prev_month: %s" % self.calendar_date_to_string() self.calendar_set_signal_strings(buffer) def calendar_next_month(self, widget): buffer = "next_month: %s" % self.calendar_date_to_string() self.calendar_set_signal_strings(buffer) def calendar_prev_year(self, widget): buffer = "prev_year: %s" % self.calendar_date_to_string() self.calendar_set_signal_strings(buffer) def calendar_next_year(self, widget): buffer = "next_year: %s" % self.calendar_date_to_string() self.calendar_set_signal_strings(buffer) def calendar_set_flags(self): options = 0 for i in range(5): if self.settings[i]: options = options + (1<<i) if self.window: self.window.display_options(options) def calendar_toggle_flag(self, toggle): j = 0 for i in range(5): if self.flag_checkboxes[i] == toggle: j = i self.settings[j] = not self.settings[j] self.calendar_set_flags() def calendar_font_selection_ok(self, button): self.font = self.font_dialog.get_font_name() if self.window: font_desc = pango.FontDescription(self.font) if font_desc: self.window.modify_font(font_desc) def calendar_select_font(self, button): if not self.font_dialog: window = gtk.FontSelectionDialog("Font Selection Dialog") self.font_dialog = window window.set_position(gtk.WIN_POS_MOUSE) window.connect("destroy", self.font_dialog_destroyed) window.ok_button.connect("clicked", self.calendar_font_selection_ok) window.cancel_button.connect_object("clicked", lambda wid: wid.destroy(), self.font_dialog) window = self.font_dialog if not (window.flags() & gtk.VISIBLE): window.show() else: window.destroy() self.font_dialog = None def font_dialog_destroyed(self, data=None): self.font_dialog = None def __init__(self): flags = [ "Show Heading", "Show Day Names", "No Month Change", "Show Week Numbers", ] self.window = None self.font = None self.font_dialog = None self.flag_checkboxes = 5*[None] self.settings = 5*[0] self.marked_date = 31*[0] window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_title("Calendar Example") window.set_border_width(5) window.connect("destroy", lambda x: gtk.main_quit()) window.set_resizable(False) vbox = gtk.VBox(False, self.DEF_PAD) window.add(vbox) # The top part of the window, Calendar, flags and fontsel. hbox = gtk.HBox(False, self.DEF_PAD) vbox.pack_start(hbox, True, True, self.DEF_PAD) hbbox = gtk.HButtonBox() hbox.pack_start(hbbox, False, False, self.DEF_PAD) hbbox.set_layout(gtk.BUTTONBOX_SPREAD) hbbox.set_spacing(5) # Calendar widget frame = gtk.Frame("Calendar") hbbox.pack_start(frame, False, True, self.DEF_PAD) calendar = gtk.Calendar() self.window = calendar self.calendar_set_flags() calendar.mark_day(19) self.marked_date[19-1] = 1 frame.add(calendar) calendar.connect("month_changed", self.calendar_month_changed) calendar.connect("day_selected", self.calendar_day_selected) calendar.connect("day_selected_double_click", self.calendar_day_selected_double_click) calendar.connect("prev_month", self.calendar_prev_month) calendar.connect("next_month", self.calendar_next_month) calendar.connect("prev_year", self.calendar_prev_year) calendar.connect("next_year", self.calendar_next_year) separator = gtk.VSeparator() hbox.pack_start(separator, False, True, 0) vbox2 = gtk.VBox(False, self.DEF_PAD) hbox.pack_start(vbox2, False, False, self.DEF_PAD) # Build the Right frame with the flags in frame = gtk.Frame("Flags") vbox2.pack_start(frame, True, True, self.DEF_PAD) vbox3 = gtk.VBox(True, self.DEF_PAD_SMALL) frame.add(vbox3) for i in range(len(flags)): toggle = gtk.CheckButton(flags[i]) toggle.connect("toggled", self.calendar_toggle_flag) vbox3.pack_start(toggle, True, True, 0) self.flag_checkboxes[i] = toggle # Build the right font-button button = gtk.Button("Font...") button.connect("clicked", self.calendar_select_font) vbox2.pack_start(button, False, False, 0) # Build the Signal-event part. frame = gtk.Frame("Signal events") vbox.pack_start(frame, True, True, self.DEF_PAD) vbox2 = gtk.VBox(True, self.DEF_PAD_SMALL) frame.add(vbox2) hbox = gtk.HBox (False, 3) vbox2.pack_start(hbox, False, True, 0) label = gtk.Label("Signal:") hbox.pack_start(label, False, True, 0) self.last_sig = gtk.Label("") hbox.pack_start(self.last_sig, False, True, 0) hbox = gtk.HBox (False, 3) vbox2.pack_start(hbox, False, True, 0) label = gtk.Label("Previous signal:") hbox.pack_start(label, False, True, 0) self.prev_sig = gtk.Label("") hbox.pack_start(self.prev_sig, False, True, 0) hbox = gtk.HBox (False, 3) vbox2.pack_start(hbox, False, True, 0) label = gtk.Label("Second previous signal:") hbox.pack_start(label, False, True, 0) self.prev2_sig = gtk.Label("") hbox.pack_start(self.prev2_sig, False, True, 0) bbox = gtk.HButtonBox () vbox.pack_start(bbox, False, False, 0) bbox.set_layout(gtk.BUTTONBOX_END) button = gtk.Button("Close") button.connect("clicked", lambda w: gtk.main_quit()) bbox.add(button) button.set_flags(gtk.CAN_DEFAULT) button.grab_default() window.show_all()def main(): gtk.main() return 0if __name__ == "__main__": CalendarExample() main()
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -