2017-09-06 95 views
1

我正在爲教育目的編寫一個非常簡單的GUI程序。該窗口有一個Gtk.Entry區域,我從中抓取輸入並用作函數num_check()的參數,該函數檢查數字是奇數還是偶數(如果輸入無效,則輸出錯誤)。綁定Enter Button to Button(PyGObject)

該按鈕工作正常,但我希望能夠使用輸入鍵而不是鼠標。按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

這工作,謝謝。 「激活」和「點擊」之間有什麼區別?激活的Entry是什麼意思?我正在閱讀[本文檔](https://python-gtk-3-tutorial.readthedocs.io/en/latest/index.html)上的PyGObject,但是我找不到太多內容。看來PyGTK和Tkinter更受歡迎。 – alqm

+0

「點擊」按鈕不難理解(一個條目沒有「點擊」您的信息)。當您輸入條目並按下回車鍵時,會出現「激活」條目。當你關注按鈕並按下空格鍵或類似的動作時,會發生「激活」按鈕,但這是一個完全不同的問題。 – theGtknerd

+0

PyGtk並不真正流行。它比較老,所以有更多的例子。實際上,PyGtk不再被開發。 – theGtknerd

相關問題