pygtk - spinbutton:输出信号

时间:2011-03-19 18:50:59

标签: callback pygtk text-formatting

我在我的应用程序中使用一个旋钮来让用户选择介于-1和100之间的数字。在我的应用程序中,-1表示无限。所以如果用户选择值-1,我想显示文本“Infinity”。这是我的代码:

def spin_output(spin):
    digits = int(spin.props.digits)
    value = spin.props.value
    if value < 0:
        spin.props.text = "Infinity"  # u"\u221E"
    else:
        spin.props.text = '{0:.{1}f}'.format(value, digits)
    return True
self.my_spin.connect('output', spin_output)

当选择“Infinity”值并且用户按下“向上”按钮时,值变为100而不是0。 当我用“u2 \ u221E”替换“Infinity”并且用户在选择时按下“向上”按钮时,该值将变为1.

我想要的是,用户可以按顺序选择值:Infinity,0,1,...... 我的错是什么?

我认为只有在用户更改值时才会更改基础调整,而我的功能仅用于显示当前值。

2 个答案:

答案 0 :(得分:1)

正在发生的事情是旋转按钮将字符串“infinity”解释为用户输入的字符串,并尝试将其解析为值。 gtk.Scale窗口小部件提供了一个名为format-value的信号,用于显示自定义值,就像您尝试的那样,但我没有看到旋转按钮的类似信号。

以下是使用可能符合您要求的比例的内容:

#!/usr/bin/env python

import gtk

def scale_output(scale, value):
    if value < 0:
        return "Infinity"  # u"\u221E"
    return "{0}".format(int(value))

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
adjustment = gtk.Adjustment(-1, -1, 100, 1, 1)
scale = gtk.HScale(adjustment)
window.set_default_size(300, 100)
window.add(scale)
scale.connect('format-value', scale_output)
window.connect('destroy', gtk.main_quit)
window.show_all()
gtk.main()

答案 1 :(得分:0)

好的,我找到了解决方案。我写了输出信号处理程序的对应物......输入信号处理程序: - )

def parallel_spin_input(spin, new_value):
    text = spin.get_text()
    if text == u"\u221E":
        value = -1
    else:
        try:
            value = float(text)
        except ValueError:
            return -1
    p = ctypes.c_double.from_address(hash(new_value))
    p.value = value
    return True
self.parallel_spin.connect('input', parallel_spin_input)

这似乎运作良好; - )