【发布时间】:2020-04-26 12:06:57
【问题描述】:
我需要实现一个接受数值的输入对话框。它是如何在 Pygobject 中完成的?它类似于 excel 接受数字输入。
【问题讨论】:
-
我打算建议重写 do_input_text 虚拟方法,我正在给你写一个示例,不幸的是我无法让它工作,所以我报告了一个错误。我真的没有看到另一种方法来做到这一点
我需要实现一个接受数值的输入对话框。它是如何在 Pygobject 中完成的?它类似于 excel 接受数字输入。
【问题讨论】:
如果您正在寻找简单的数值,您可以使用Gtk.SpinButton。
在 UI 中获取用户输入的更通用方式是Gtk.Entry。该小部件不支持内置验证,但可以轻松实现,类似于 stackoverflow answer 中所示(通过覆盖 insert_text 方法)。
如果您想向您的用户显示验证错误,您可以使用 CSS 样式,或者例如将辅助图标(例如 secondary_icon_name 属性)设置为警告标志,并附带一个说明错误的标签.
【讨论】:
在 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()
【讨论】: