有没有办法看到SpinButton在接收到价值变化信号时有多少变化?
我试图实现一组链接的SpinButton,其中一个更改将导致所有这些变化。我不希望它们具有相同的值,但是具有相同的增量(即,在一个SpinButton上增加一次将导致其他SpinButton增加)。
除了可能跟踪背景中的值(可能是由焦点事件或其他东西触发)之外,我似乎无法想出任何东西,然后自己计算delta。这几乎是唯一的方法吗?
答案 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
。