1

コード、

from Tkinter import *

master = Tk()
Label(master, text="Current Age: ").grid(row=0, column=0)
current = StringVar(master)
current.set("0")

coption = OptionMenu(master, current, *[str(i) for i in range(95)])
coption.grid(row=0,column=1)

Label(master, text="Target Age: ").grid(row=1, column=0)

target = StringVar(master)
target.set("0") # default deger

toption = OptionMenu(master, target, *[str(i) for i in range(95)])
toption.grid(row=1,column=1)

mainloop()

現在の年齢用とターゲット年齢用の 2 つのコンボボックスがあります。対象年齢に現在の年齢を超える値のみを含めたい。したがって、何らかの方法で変更コールバックに登録する必要があると思います。グーグルで検索しましたが、役に立ちませんでした。

4

2 に答える 2

2

ここには、ターゲットの menuoptions とそれをトリガーするイベントを変更する関数があります。

def changed(*args):
    start = current.get()
    print(start)
    menu = toption["menu"]
    menu.delete(0, END)
    for age in range(int(start), 95):
        menu.add_command(label=age,
                         command=lambda v=target, l=age: v.set(l))                
    target.set(start)

current.trace('w', changed)

これは、ここここ、およびここから部分的に取っています。

于 2013-01-01T13:49:20.227 に答える
1

OptionMenu95 のエントリのメニューよりもオプションを選択するのが好きな人はいません。とにかく、更新を行うために Tcl 変数のトレースに依存する必要はありません。受け入れられるcommand引数について覚えておいてください。OptionMenuそれを使用すると、問題は次のように解決されます。

import Tkinter

AGELIMIT = 95
AGEOPT = [str(i) for i in range(AGELIMIT)]

def update_agelist(currage):
    # Rewrite the Menubutton associated with the Optionmenu.
    menu = toption['menu']
    menu.delete(0, 'end')
    for age in range(int(currage), AGELIMIT):
        menu.add_command(label=age, command=Tkinter._setit(target, age))

    target.set(currage)


master = Tkinter.Tk()
Tkinter.Label(text=u"Current Age: ").grid(row=0, column=0)

current = Tkinter.StringVar(value='0')
coption = Tkinter.OptionMenu(master, current, *AGEOPT, command=update_agelist)
coption.grid(row=0,column=1)

Tkinter.Label(text=u"Target Age: ").grid(row=1, column=0)

target = Tkinter.StringVar(value='0')
toption = Tkinter.OptionMenu(master, target, *AGEOPT)
toption.grid(row=1, column=1)

master.mainloop()
于 2013-01-02T19:57:47.173 に答える