【问题标题】:Bind Enter key to Button (PyGObject)将 Enter 键绑定到 Button (PyGObject)
【发布时间】:2017-09-06 11:44:31
【问题描述】:

我正在为教育目的编写一个非常简单的 GUI 程序。该窗口有一个 Gtk.Entry 区域,我从中获取输入并用作函数 num_check() 的参数,该函数检查数字是奇数还是偶数(如果输入无效,则输出错误)。

按钮工作正常,但我希望能够使用 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()

【问题讨论】:

    标签: python gtk pygobject


    【解决方案1】:

    试试这个代码:

    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

    【讨论】:

    • 这行得通,谢谢。 “激活”和“点击”有什么区别?激活的条目是什么意思?我正在阅读 PyGObject 上的 this documentation,但我找不到太多关于它的信息。 PyGTK 和 Tkinter 似乎更受欢迎。
    • “点击”按钮不难理解(条目没有“点击”供您参考)。当您输入条目并按回车键时,会出现“激活”条目。当您专注于按钮并按空格键或类似操作时,会发生“激活”按钮,但这是一个完全不同的问题。
    • PyGtk 并不是很流行。它较旧,因此有更多示例。实际上 PyGtk 已不再开发。
    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 2014-03-23
    • 2019-04-05
    • 2010-10-08
    • 2020-09-24
    • 2020-05-31
    • 2016-02-22
    • 1970-01-01
    相关资源
    最近更新 更多