1

我在我的应用程序中使用了一个微调按钮,让用户选择一个介于 -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)

When the "Infinity"-value is selected and the user presses the "up"-button the value changes to 100 instead of 0. When i replace "Infinity" with u"\u221E" and the user presses the "up"-button当它被选中时,值变为 1。

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

我认为当用户更改值时只会更改底层调整,而我的函数仅用于显示当前值。

4

2 回答 2

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()
于 2011-03-20T07:48:01.090 回答
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)

这似乎运作良好;-)

于 2011-03-20T20:31:51.743 回答