2011-03-19 46 views
1

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

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) 

当选择“无限”值并且用户按下“向上” - 按钮的值变为100而不是0 当我替换“无限”与u”的\ u221E“,用户在选中时按下”向上“按钮,数值变为1.

我想要的是,用户可以按照以下顺序选择值:Infinity,0,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) 

这似乎运作良好;-)

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()