2011-03-19 61 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()