获取更改值的更改 (GTK.SpinButton)

Get the change on value-changed (GTK.SpinButton)

有没有办法在接收到值更改信号时查看 SpinButton 更改了多少?

我正在尝试实现一组链接的微调按钮,其中一个微调按钮的变化将导致所有微调按钮发生变化。我不希望它们具有相同的值,但具有相同的增量(即在一个 SpinButton 上增加一次将导致在其他 SpinButtons 上增加)。

我似乎想不出任何办法,只能在后台跟踪值(可能由焦点事件或其他事件触发),然后自己计算增量。这几乎是唯一的方法吗?

这样做的唯一方法是按照您所说的计算增量。这里有一个例子:

from gi.repository import Gtk

class Spins(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)

        self.connect("destroy", lambda q: Gtk.main_quit())

        box=Gtk.VBox()

        self.sp1_val=5
        self.sp2_val=15

        adjustment1 = Gtk.Adjustment(value=self.sp1_val, lower=-10, upper=2500, step_increment=5, page_increment=5, page_size=0)
        self.spinbutton1 = Gtk.SpinButton(adjustment=adjustment1)
        self.spinbutton1.connect('value-changed', self.on_spinbutton_1_changed)

        adjustment2 = Gtk.Adjustment(value=self.sp2_val, lower=-10, upper=2500, step_increment=15, page_increment=5, page_size=0)
        self.spinbutton2 = Gtk.SpinButton(adjustment=adjustment2)
        self.spinbutton2.connect('value-changed', self.on_spinbutton_2_changed)

        box.add(self.spinbutton1)
        box.add(self.spinbutton2)
        self.add(box)
        self.show_all()


    def on_spinbutton_1_changed(self, widget, data=None):
        current_value=self.spinbutton1.get_value()
        delta=(current_value-self.sp1_val)
        self.sp1_val=current_value
        self.sp2_val+=delta
        self.spinbutton2.set_value(self.sp2_val)

    def on_spinbutton_2_changed(self, widget, data=None):
        current_value=self.spinbutton2.get_value()
        delta=(current_value-self.sp2_val)
        self.sp2_val=current_value
        self.sp1_val+=delta
        self.spinbutton1.set_value(self.sp1_val)

spins=Spins()
Gtk.main()

我相信,如果您以任何其他方式进行,您将进入无限循环,并且您将始终达到调整的最大值。为什么?因为 value-changed 信号跟踪值何时被更改,无论是程序还是用户。因此,如果您手动修改 spinbutton1,则会激活 on_spinbutton_1_changed,因此它会修改 spinbutton2,并且会激活 on_spinbutton_2_changed,从而修改 spinbutton1。你看到无限循环了吗?这就是为什么你需要存储 self.sp1_val and self.sp2_val.