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)

「無限」値が選択され、ユーザーが「上」ボタンを押すと、値が 0 ではなく 100 に変わります。「無限」を u"\u221E" に置き換えて、ユーザーが「上」ボタンを押すと、選択されている間、値は 1 に変わります。

私が望むのは、ユーザーがその順序で値を選択できることです:無限、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 に答える