使用Python 3.8,GTK 3.0,我想阻止用户在 Gtk.SpinButton()
的同时,还留下 +/-
up/down
部分的SpinButton功能。 这可能吗?
我试过 set_editable(False)
但这将禁用整个小组件,包括向上箭头。
我想也许有一种方法可以访问 Gtk.Entry()
的部分,并调用 set_editable(False)
只在该子上,但还没有找到。
EDIT: 下面是一些演示代码
我们的目标是让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)