【问题标题】:is there a way to take numerical inputs in gtk+, pygobject?有没有办法在 gtk+、pygobject 中输入数字?
【发布时间】:2020-04-26 12:06:57
【问题描述】:

我需要实现一个接受数值的输入对话框。它是如何在 Pygobject 中完成的?它类似于 excel 接受数字输入。

【问题讨论】:

  • 我打算建议重写 do_input_text 虚拟方法,我正在给你写一个示例,不幸的是我无法让它工作,所以我报告了一个错误。我真的没有看到另一种方法来做到这一点

标签: gtk gtk3 pygobject


【解决方案1】:

如果您正在寻找简单的数值,您可以使用Gtk.SpinButton

在 UI 中获取用户输入的更通用方式是Gtk.Entry。该小部件不支持内置验证,但可以轻松实现,类似于 stackoverflow answer 中所示(通过覆盖 insert_text 方法)。

如果您想向您的用户显示验证错误,您可以使用 CSS 样式,或者例如将辅助图标(例如 secondary_icon_name 属性)设置为警告标志,并附带一个说明错误的标签.

【讨论】:

    【解决方案2】:

    在 Ricardo Silva Veloso 的帮助下,这基本上是我在第一条评论中建议编写的代码(同时考虑了@nielsdg 辅助图标建议):

    import gi
    
    gi.require_version("Gtk", "3.0")
    from gi.repository import Gtk
    
    class MyEntry(Gtk.Entry, Gtk.Editable):
        __gtype_name__ = 'MyEntry'
        
        def __init__(self, **kwargs):
            super(MyEntry, self).__init__(**kwargs)
    
        def do_insert_text(self, text, length, position):
            if text.isnumeric():
                self.props.secondary_icon_name = None
                self.get_buffer().insert_text(position, text, length)
                return length + position
            else:
                self.props.secondary_icon_name = "dialog-error"
                self.props.secondary_icon_tooltip_text = "Only numbers are allowed"
                return position
    
    win = Gtk.Window()
    myentry = MyEntry()
    
    win.add(myentry)
    
    win.connect("destroy", Gtk.main_quit)
    win.show_all()
    Gtk.main()
    

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多