2016-06-20 2 views
1

を解決するために、IEのようなコマンド履歴をナビゲート異なる機能を実行するために矢印キーをバインドされていますターミナル。私たちは歴史のナビゲーションを回すことができるように完了ポップアップは、アクティブ/表示されている場合Gtk.EntryCompletion()ポップアップのステータスが、私は<strong>Gtk.EntryCompletion()</strong>と<strong>Gtk.Entry()</strong>を持っているキーバインド競合

しかし、履歴ナビゲーションと完了ポップアップ意志、競合上のナビゲーションは、チェックする方法はあります。

さらに、合計一致回数を取得する方法は完了ポップアップですか?

以下はサンプルプログラムです。

#!/usr/bin/env python3 

import gi 
gi.require_version('Gtk', '3.0') 

from gi.repository import Gtk 

entry = Gtk.Entry() 

def on_key_press(widget, event): 
    # NOTE to stop propagation of signal return True 
    if event.keyval == 65362: widget.set_text("history -1") # Up-arrow 
    elif event.keyval == 65364: widget.set_text("history +1") # Down-arrow 

entry.connect('key_press_event', on_key_press) 

entrycompletion = Gtk.EntryCompletion() 
entry.set_completion(entrycompletion) 

liststore = Gtk.ListStore(str) 
for row in "entry complete key conflit with history".split(): 
    liststore.append([row]) 

entrycompletion.set_model(liststore) 
entrycompletion.set_text_column(0) 

root = Gtk.Window() 
root.add(entry) 
root.connect('delete-event', Gtk.main_quit) 
root.show_all() 
Gtk.main() 

答えて

1

あなたはentrycompletion.set_inline_selection(True)Trueにインライン選択オプションを設定する必要があります。これにより、キー押下イベントが補完ポップアップメニューに接続されます。

#!/usr/bin/env python3 

import gi 
gi.require_version('Gtk', '3.0') 

from gi.repository import Gtk 

entry = Gtk.Entry() 

def on_key_press(widget, event): 
    # NOTE to stop propagation of signal return True 
    if event.keyval == 65362: widget.set_text("history -1") # Up-arrow 
    elif event.keyval == 65364: widget.set_text("history +1") # Down-arrow 

entry.connect('key_press_event', on_key_press) 

entrycompletion = Gtk.EntryCompletion() 
entrycompletion.set_inline_selection(True) #enables selection with up and down arrows 
entry.set_completion(entrycompletion) 

liststore = Gtk.ListStore(str) 
for row in "entry complete key conflit with history".split(): 
    liststore.append([row]) 

entrycompletion.set_model(liststore) 
entrycompletion.set_text_column(0) 

root = Gtk.Window() 
root.add(entry) 
root.connect('delete-event', Gtk.main_quit) 
root.show_all() 
Gtk.main() 
+0

ありがとう、この問題はこの問題を解決できないほどイライラしていました。 – rho

+0

最後に完全に解決しました。今、私は平和で眠ることができます。 **不一致**があったときにエントリのフォーカスを失うという問題があった場合、信号の伝播を止めれば、エントリから迷子になった場合、オートコンプリート提案をナビゲートできなくなります。 **カーソルオンマッチ**シグナルは、ユーザーが定義した後にのみ表示されます** key_press_event **。 ** Gtk.Widget **の**フォーカス**信号を使用して解決しました – rho

関連する問題

 関連する問題