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

时间:2015-06-22 21:13:46

标签: pygobject

有没有办法看到SpinButton在接收​​到价值变化信号时有多少变化?

我试图实现一组链接的SpinButton,其中一个更改将导致所有这些变化。我不希望它们具有相同的值,但是具有相同的增量(即,在一个SpinButton上增加一次将导致其他SpinButton增加)。

除了可能跟踪背景中的值(可能是由焦点事件或其他东西触发)之外,我似乎无法想出任何东西,然后自己计算delta。这几乎是唯一的方法吗?

1 个答案:

答案 0 :(得分:2)

这样做的唯一方法是通过计算你所说的delta。这里有一个例子:

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的{​​{1}}。你看到无限循环?这就是您需要存储spinbutton1

的原因