python-3.x - 防止在 PyGTK SpinButton 中手动输入文本
问题描述
使用 Python 3.8、GTK 3.0,我想防止用户在 a 中手动输入文本Gtk.SpinButton()
,同时保留 SpinButton 的+/-
/up/down
部分功能。这可能吗?
我试过set_editable(False)
了,但这会禁用整个小部件,包括向上/向下箭头。
我想也许有一种方法可以访问Gtk.Entry()
SpinButton 的部分,并且set_editable(False)
只调用那个孩子,但还没有找到它。
编辑:这是一些演示代码
目标是禁用 spin1 的文本输入字段(理想情况下是不敏感的,因此单击时光标不会出现),而 +/- 按钮仍然有效,并且仍然更新值。spin2 & spin3 走得太远,因为即使是 +/- 按钮也不起作用。
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class SpinButtonWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="SpinButton Demo")
self.set_border_width(10)
grid = Gtk.Grid()
grid.set_column_spacing(6)
grid.set_row_spacing(4)
self.add(grid)
adj1 = Gtk.Adjustment()
adj1.configure(0, 0, 100, 10, 10, 0)
spin1 = Gtk.SpinButton()
spin1.set_adjustment(adj1)
grid.attach(spin1, 0, 0, 1, 1)
adj2 = Gtk.Adjustment()
adj2.configure(0, 0, 100, 10, 10, 0)
spin2 = Gtk.SpinButton()
spin2.set_adjustment(adj2)
spin2.set_editable(False)
grid.attach(spin2, 1, 0, 1, 1)
adj3 = Gtk.Adjustment()
adj3.configure(0, 0, 100, 10, 10, 0)
spin3 = Gtk.SpinButton()
spin3.set_adjustment(adj3)
spin3.set_sensitive(False)
grid.attach(spin3, 2, 0, 1, 1)
label1 = Gtk.Label(label='Basic Spin')
label1.set_halign(Gtk.Align.CENTER)
grid.attach(label1, 0, 1, 1, 1)
label2 = Gtk.Label(label='Editable=False')
label2.set_halign(Gtk.Align.CENTER)
grid.attach(label2, 1, 1, 1, 1)
label3 = Gtk.Label(label='Sensitive=False')
label3.set_halign(Gtk.Align.CENTER)
grid.attach(label3, 2, 1, 1, 1)
win = SpinButtonWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
解决方案
您可以配置spin1
为忽略大多数按键。
更改导入:
from gi.repository import Gtk, Gdk
将以下方法添加到SpinButtonWindow
类:
def key_handler(self, widget, event):
key = Gdk.keyval_name(event.keyval)
if key in ['Up', 'Down', 'Page_Up', 'Page_Down']:
return widget.im_context_filter_keypress(event)
# Ignore other keys.
return True
将此方法连接到微调框:
spin1 = Gtk.SpinButton()
spin1.connect("key-press-event", self.key_handler)
推荐阅读
- flutter - 成员 'notifyListeners' 只能在 'package:flutter/src/foundation/change_notifier.dart' 或测试中使用
- python - 如何对项目进行分组并将行放入包含分类数据的列中
- asynchronous - 处理需要时间的异步 api 调用的最佳实践是什么
- javascript - 有没有办法完美计算外矩形和内矩形之间的半径差?
- asp.net-core-mvc - 使用 .NET Core MVC 响应显示属性之一的 NULL 值
- javascript - 如何从 API 检查电子邮件是否已注册
- c# - ASP.NET Core + 身份服务器 + Angular over HTTP
- flutter - 在 Flutter 中嵌入 Native ,Platform-View - 将 Native 视图作为小部件返回到 Flutter
- java - 从地图中检索键列表
- vbscript - Chilkat + codeSigning