⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.py

📁 pygtk的教程
💻 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 + -