How to implement an GInterface class from its python binding? ex of Gtk.CellEditable
- From: narcisse doudieu siewe <wambenarcisse yahoo fr>
- To: "gtk-app-devel-list gnome org" <gtk-app-devel-list gnome org>, ML-gtk <gtk-list gnome org>
- Subject: How to implement an GInterface class from its python binding? ex of Gtk.CellEditable
- Date: Sun, 2 Feb 2014 00:32:16 +0000 (GMT)
Some general question
it is for the python binding of Gtk3
I actually try to create a custom widget which implements try Gtk.CellEditable
but nothing good appears, any suggestions?
my code:
# -*- 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()
[Date Prev][
Date Next] [Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]