[pygtk] Re: adjust key bindings
Fabian Braennstroem
f.braennstroem at gmx.de
Tue Nov 28 02:25:04 WST 2006
Hi John,
* On 25 Nov 2006 * John CORRY wrote:
> Fabian,
>
> I have had a go at binding the "z" key to the down cursor key. I can
> block the Z key press and assign the "down" cursor key press and print
> out the "down" key press but I can't redirect the signal back to the
> widget. I have enclosed the code below, maybe someone else on the list
> can finish off the code.
>
> The code below assumes that you have a window in Glade with one treeview
> widget. Both widgets have the "key_press_event" assigned in glade.
>
> import shutil
> import pygtk
> import findgtk
> import gtk
> import gtk.glade
>
> import gobject
> import os
> import sys
>
> class Shopcard:
>
> def __init__(self):
> self.wTree = gtk.glade.XML ("project12.glade", "window1")
> dic={"on_window1_delete_event" : self.quit100, }
> self.wTree.signal_autoconnect (dic)
> tree1 = self.wTree.get_widget("treeview1")
> windy = self.wTree.get_widget("window1")
> tree1.connect("key_press_event",self.callback3000,tree1,windy)
> model = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
> self.hostmodel = model
> host_inter=self.insert_row(model,None,"test",'Test')
> host_inter=self.insert_row(model,None,"test1",'Test')
> host_inter=self.insert_row(model,None,"test2",'Test')
> host_inter=self.insert_row(model,None,"test3",'Test')
> host_inter=self.insert_row(model,None,"test4",'Test')
> tree1.set_model(model)
> renderer=gtk.CellRendererText()
> column=gtk.TreeViewColumn("Col1",renderer,text=0)
> column.set_resizable(True)
> tree1.append_column(column)
> renderer=gtk.CellRendererText()
> column=gtk.TreeViewColumn("Col2",renderer,text=1)
> column.set_resizable(True)
> tree1.append_column(column)
>
> def insert_row(self,model,parent,firstcolumn,secondcolumn,
> thirdcolumn=None):
> myiter=model.insert_after(parent,None)
> model.set_value(myiter,0,firstcolumn)
> model.set_value(myiter,1,secondcolumn)
> if thirdcolumn !=None:
> model.set_value(myiter,2,thirdcolumn)
> return myiter
>
>
> def callback3000(self,widget,event,tree1,windy):
> import re
>
> """prevents the possibility of inputting wrong chars"""
> ## fixme: missing comma, and cut&paste
> key = gtk.gdk.keyval_name (event.keyval)
>
>
> ONLYDIGITS="([0-9.,z]|BackSpace|Left|Right|F1|period|Tab|Up|Down)"
> if not re.match (ONLYDIGITS, key):
> print "True"
> return True
>
> else:
> if key == "z":
> tree1.emit_stop_by_name("key_press_event") # This blocks
> the signal from the key press
> event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
> event.keyval = 65364 # This is the code for the down key
>
>
> event.state = gtk.gdk.CONTROL_MASK
> event.time = 0 # assign current time
> print gtk.gdk.keyval_name(event.keyval)
> tree1.emit('key_press_event', event)
> tree1.connect("key_press_event",self.callback3001)
>
> else:
> print event.keyval
> print "else"
> return False
> def callback3001(self,widget,event):
> import re
>
> """prevents the possibility of inputting wrong chars"""
> ## fixme: missing comma, and cut&paste
> key = gtk.gdk.keyval_name (event.keyval)
> print key
> print "made it"
>
> ONLYDIGITS="([0-9.,z]|BackSpace|Left|Right|F1|period|Tab|Up|Down)"
> if not re.match (ONLYDIGITS, key):
> print "True2"
> return True
> def quit(self,obj):
> gtk.main_quit()
> sys.exit(1)
> def quit100(self,obj,wind):
> gtk.main_quit()
> sys.exit(1)
>
> if __name__ == '__main__':
> Shopcard()
> try:
> gtk.threads_init()
> except:
> print "No threading was enabled when you compiled pyGTK!"
> import sys
> sys.exit(1)
> gtk.threads_enter()
> gtk.main()
> gtk.threads_leave()
>
Thanks for the long example! Would be nice, if anybody knows
a way to connect the keybinding back to the widget, so it
moves the cursor...
Greetings!
Fabian
More information about the pygtk
mailing list