# -*- coding:utf-8 -*-
from gi.repository import Gtk, Gio, GLib, GObject
from gi.overrides import keysyms as kval
import datetime
from datetime import date
class EditableCalendar(Gtk.Calendar, Gtk.CellEditable):
editing_canceled =
GObject.property(type=bool, default=False)
def __init__(self):
#Gtk.CellEditable.__init__(self)
Gtk.Calendar.__init__(self)
self.canceled = False
def editing_done(self):
self.emit("editing_done")
def remove_widget(self):
self.emit("remove_widget")
def start_editing(self, event):
if(event.get_keyval() == kval.Escape):
self.cancel = True
self.editing_done()
self.remove_widget()
if(event.get_val() == kval.KP_Enter):
self.editing_done()
self.remove_widget()
def get_date_str():
day = self.get_property("day")
month = self.get_property("month")
year = self.get_property("year")
return date(year, month, day).strftime("%d-%m-%Y")
class RendererCalendar(Gtk.CellRendererText):
def __init__(self):
Gtk.CellRendererText.__init__(self)
self.path = None
self.widget = None
def calendar_editing_done(self, editable):
if(editable.canceled == True):
editable.canceled = False
return
str_date = editable.get_date_str()
self.emit("edited", path, str_date)
def do_start_editing(self, event, widget, path, background_area, cell_area, flag):
if( self.get_property("editable") != True):
return
editable = EditableCalendar()
editable.show()
editable.grab_focus()
self.path = path
self.widget = widget
editable.connect("editing_done", self.calendar_editing_done, editable)
self.connect("edited", self.edited)
return editable
def edited(self, path, next_text):
store = self.widget.get_model()
store[path][0] = next_text
print(next_text)
class
winpriv(Gtk.Window):
def __init__(self, typ, tit):
Gtk.Window.__init__(self, typ, title = tit)
self.tree = Gtk.TreeView()
self.store = Gtk.ListStore(str)
self.treecol = Gtk.TreeViewColumn()
self.rend = RendererCalendar()
self.rend.set_property("editable", True)
self.treecol.pack_start(self.rend, True)
self.treecol.add_attribute(self.rend, "text", 0)
self.tree.set_model(self.store)
self.store.append(["31-01-2014"])
self.store.append(["20-01-2014"])
self.add(self.tree)
self.tree.append_column(self.treecol)
self.connect("destroy", self.dest)
def dest(self, widget):
self.destroy()
Gtk.main_quit()
win = winpriv(Gtk.WindowType.TOPLEVEL, "ESSAIE")
win.show_all()
Gtk.main()