我在我的应用程序中使用一个旋钮来让用户选择介于-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,...... 我的错是什么?
我认为只有在用户更改值时才会更改基础调整,而我的功能仅用于显示当前值。
答案 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)
这似乎运作良好; - )