2017-09-06 1 views
1

Ich schreibe ein sehr einfaches GUI-Programm für Bildungszwecke. Das Fenster hat einen Gtk.Entry-Bereich, von dem ich die Eingabe nehme und als Argument für die Funktion num_check() verwende, die prüft, ob die Zahl ungerade oder gerade ist (und einen Fehler ausgibt, wenn die Eingabe ungültig ist).Bind-Taste zu Taste (PyGObject)

Die Schaltfläche funktioniert gut, aber Ich möchte in der Lage sein, die Eingabetaste anstelle der Maus zu verwenden. Und nach dem Drücken der Eingabetaste sollte der Fokus zum Eingabefeld (Gtk.Entry) zurückkehren.

Hier ist der Code. Ich schätze jede Hilfe.

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() 

Antwort

0

diesen Code Versuchen:

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() 

Edit: die Dokumentation für die Signale sind here.

+0

Das hat funktioniert, danke. Was ist der Unterschied zwischen "aktivieren" und "geklickt"? Was bedeutet ein aktivierter Eintrag? Ich lese [diese Dokumentation] (https://python-gtk-3-tutorial.readthedocs.io/en/latest/index.html) über PyGObject, aber ich konnte nicht viel darüber finden. Es scheint, dass PyGTK und Tkinter beliebter sind. – alqm

+0

Die Schaltfläche "geklickt" ist nicht schwer zu verstehen (ein Eintrag hat keine "geklickt" für Ihre Informationen). Der Eintrag "activate" erfolgt, wenn Sie in den Eintrag tippen und die Eingabetaste drücken. Die Schaltfläche "Aktivieren" passiert, wenn Sie auf die Schaltfläche fokussieren und die Leertaste oder ähnliche Aktionen drücken, aber das ist eine ganz andere Frage. – theGtknerd

+0

PyGtk ist nicht wirklich beliebter. Es ist älter, deshalb gibt es mehr Beispiele dafür. In Wirklichkeit ist PyGtk nicht mehr entwickelt. – theGtknerd

Verwandte Themen