- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有三个相互依赖的 PyGTK SpinButton:将它们称为 A、B 和 C。还有另一个按钮 D 在 C 的两个相互定义之间切换,这样 C 的值定义为 A/B 除非 D 被按下奇数次。
例如,我希望能够根据此关系更改 A 并让 B 或 C 立即更新。我还希望能够更改 B 并立即更新 A 或 C。 C 也是如此。我决定,当其中一个发生更改时,应更新最近最少更改的 SpinButton,并且如果自程序开始以来没有更改过 SpinButton,则应假定 C 最近已更改。
以上所有内容均已实现。我的应用程序监听每个 SpinButton 的值更改信号,执行上述计算,然后按所述更新其他两个的值。但是,应用程序会获取自己的更改并对其做出响应。当我更改 A 时,我的程序会更改 B,而 B 是通过更改 C 来处理的,依此类推。我也尝试过更改值信号,但它不响应 SpinButton 的更改。
如何以不被程序本身触发的方式监听 SpinButton 值的变化?
最佳答案
您可以在调用 set_value
之前禁用给定微调器的信号处理程序。这确保了信号仅在响应鼠标和键盘事件时触发,而不是在编程更改时触发。这是一个简单的例子:
import pygtk, gtk
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.connect('destroy', lambda w: gtk.main_quit())
def _add_spinner():
adj = gtk.Adjustment(0.0, -100.0, 100.0, 1.0, 2.0, 0.0)
spin = gtk.SpinButton(adj, 0, 1)
spin.set_wrap(True)
hbox.pack_start(spin, True, True, 10)
return spin
vbox = gtk.VBox(True, 10)
hbox = gtk.HBox(True, 10)
vbox.pack_start(hbox, True, True, 10)
spin1 = _add_spinner()
spin2 = _add_spinner()
win.add(vbox)
def set_spin(src, dst):
# ensure that calling `set_value` does not fire events
hid = handlers.get(dst)
dst.handler_block(hid)
dst.set_value(src.get_value() + 1.5)
dst.handler_unblock(hid)
# when 'spinN' is changed, call 'set_spin'
hid1 = spin1.connect('value-changed', set_spin, spin2)
hid2 = spin2.connect('value-changed', set_spin, spin1)
handlers = {spin1: hid1, spin2: hid2}
win.show_all()
gtk.main()
关于python - 相互依赖的 PyGtk SpinButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6104098/
我正在努力使用 实现具有递增/递减行为的可访问输入HTML/JavaScript 中的元素。但似乎 VoiceOver 有用于递增/递减的自定义(假?)输入事件,这些事件会以意想不到的方式改变输入的
我需要创建一个带有 SpinButton 的用户窗体。用户选择一个值,完成后单击“确定”(将所选值传递给另一个过程)。 它是这样的: 现在,如何在标签或其他向用户显示她选择的值的东西上显示 SpinB
我有三个相互依赖的 PyGTK SpinButton:将它们称为 A、B 和 C。还有另一个按钮 D 在 C 的两个相互定义之间切换,这样 C 的值定义为 A/B 除非 D 被按下奇数次。 例如,我希
我想在旋转按钮中有一个前导零,以便始终显示两位数。 adj_hour = gtk.Adjustment(int(time.strftime("%H")),0,24,1,1) entry_hour =
我很确定有一种简单的方法可以做到这一点……但我对 GTK3 (coding in C/C++) 不太熟练此刻,我发现自己陷入了寻找如何创建新的GtkSpinButton在输入文本框的上方和下方使用“+
我正在努力使用 Relm 在 Rust 中使用 SpinButton。 (免责声明,我是 Rust 和 GTK 的菜鸟) #![feature(proc_macro)] extern crate gt
与this相关,但更具体一点:如何创建像 gtk.SpinButton 中那样的微型按钮小部件? 最佳答案 这也是我很多个月的问题。您可以使用 gtk.Arrow,除非它与 SpinButton 不完
我有一堆控制文本框中的值的旋转按钮。我正在使用一个类来允许它们全部使用相同的更改事件。它非常适合未格式化的盒子。 但是,当我尝试使文本框显示 + 和 - 数字时,它无法正常工作。只有第一个旋转按钮可以
我是一名优秀的程序员,十分优秀!