2011-07-26 3 views
3

gtk.AccelGroupを使用するときは、タブのチャーターとの任意の組み合わせが無効です。今私はこのキーを使ってUIナビゲーションが行われていることを理解していますが、特別な場合にはその動作をオーバーライドする必要があります。 AccelGroupにこのキーの使用を許可する方法はありますか?例えばPyGTK:AccelGroupのタブの使用を許可する

group = gtk.AccelGroup() 
group.connect(gtk.gdk.keyval_from_name('Tab'), gtk.gdk.CONTROL_MASK, 0, callback) 

答えて

1

あなたは簡単にこれをキー名と値を取得することができます:

#!/usr/bin/env python 

import gtk 
import gtk 

def catch_button(window, event, label): 
    keyval = event.keyval 
    name = gtk.gdk.keyval_name(keyval) 
    mod = gtk.accelerator_get_label(keyval, event.state) 
    label.set_markup('<span size="xx-large">%s\n%d</span>'% (mod, keyval)) 


window = gtk.Window() 
window.set_size_request(640,480) 
label = gtk.Label() 
label.set_use_markup(True) 
window.connect('key-press-event',catch_button, label) 
window.connect('destroy', gtk.main_quit) 
window.add(label) 
window.show_all() 

gtk.main() 

しかし、私は戻っキー名は、私にとっては大きな使用の、ロケールに依存していたことがわかりました。おそらくkeyvalを使うことができます。 乾杯、 ルイ

+0

このキャプチャされたタブ文字は? – MeanEYE

+0

それはどんな鍵を与える! – Louis

+0

ええ、問題は、すべてのキーを押すのを待つことなく、Tabとキーの組み合わせを特定の方法で接続することでした。 – MeanEYE

1

以下はこれを行う方法の1つです。上記のようにプログラムがすべてのキー入力を聞きたくないのであれば、私はTabをAccelGroupに結びつける方法を一度も経験したことはありません。私は様々なことを自分で試してみましたが、役に立たないものです。

widget.connect("key-press-event",self.on_key_pressed) 

def on_key_pressed(self,widget,event,*args): 
    if event.keyval == gtk.keysyms.Tab: 
     do_something() 
+0

それほど考えました。私はgtk.keysymsについて知らなかった。ありがとう。私は、CellRendererAccelを使って遊んでいるときに、GTKでショートカットを解析し、Tab、Arrows、および他の予約キーが機能しないように指定することができます。私はAccelGroupでもそうするオプションがあると思った。 – MeanEYE

関連する問題