2017-09-06 19 views
1

私は教育目的で非常に簡単なGUIプログラムを作成しています。ウィンドウにはGtk.Entry領域があり、そこから入力を取得し、数値が奇数か偶数かをチェックするnum_check()関数の引数として使用します(入力が無効の場合はエラーを出力します)。ボタンへのキー入力(PyGObject)

ボタンは正常ですが、マウスの代わりにEnterキーを使用したいと考えています。 Enterキーを押すと、フォーカスは入力ボックス(Gtk.Entry)に戻ります。

ここにコードがあります。私はどんな助けにも感謝します。

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk, GObject 
import odd_even 

class EntryWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="ODD OR EVEN") 
     self.set_size_request(200, 100) 

     self.timeout_id = None 

     vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) 
     self.add(vbox) 

     self.entry = Gtk.Entry() 
     self.entry.get_text() 
     vbox.pack_start(self.entry, True, True, 0) 

     button = Gtk.Button.new_with_label("Go") 
     button.connect("clicked", self.on_click_me_clicked) 
     vbox.pack_start(button, True, True, 0) 

     self.label = Gtk.Label() 
     self.label.get_text() 
     vbox.pack_start(self.label, True, True, 0) 

# after pressing "Go", grab text from entry and run num_check() with it, then set label with the result 
    def on_click_me_clicked(self, button): 
     number = self.entry.get_text() 
     func = odd_even.num_check(number) 
     print(func) 

     self.label.set_text(func) 


win = EntryWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

答えて

0

このコードを試してみてください。

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk, GObject 
import odd_even 

class EntryWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="ODD OR EVEN") 
     self.set_size_request(200, 100) 

     self.timeout_id = None 

     vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) 
     self.add(vbox) 

     self.entry = Gtk.Entry() 
     self.entry.get_text() 
     self.entry.connect("activate", self.on_entry_activate) 
     vbox.pack_start(self.entry, True, True, 0) 

     button = Gtk.Button.new_with_label("Go") 
     button.connect("clicked", self.on_click_me_clicked) 
     vbox.pack_start(button, True, True, 0) 

     self.label = Gtk.Label() 
     self.label.get_text() 
     vbox.pack_start(self.label, True, True, 0) 

    def on_entry_activate (self, entry): 
     number = entry.get_text() 
     func = odd_even.num_check(number) 
     print(func) 

     self.label.set_text(func) 

# after pressing "Go", grab text from entry and run num_check() with it, then set label with the result 
    def on_click_me_clicked(self, button): 
     number = self.entry.get_text() 
     func = odd_even.num_check(number) 
     print(func) 

     self.label.set_text(func) 


win = EntryWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

編集:信号用のドキュメントがhereです。

+0

これは感謝しました。 「有効化」と「クリック」の違いは何ですか?アクティブ化されたエントリは何を意味しますか?私はPyGObjectの[このドキュメント](https://python-gtk-3-tutorial.readthedocs.io/en/latest/index.html)を読んでいますが、それについてはあまり見つけられませんでした。 PyGTKとTkinterが普及しているようだ。 – alqm

+0

「クリックされた」ボタンは理解しにくいです(情報には「クリック」されていません)。エントリーを入力してEnterキーを押すと、エントリー "活動化"が起こります。 「アクティブ化」ボタンは、ボタンにフォーカスしてスペースバーや同様の操作を押すと発生しますが、それは全く異なる質問です。 – theGtknerd

+0

PyGtkはそれほど人気が​​ありません。それはより古く、そのためにもっと多くの例があります。実際、PyGtkはもはや開発されていません。 – theGtknerd

関連する問題