2017-07-21 24 views
0
import tkinter 

window = tkinter.Tk() 

def abc(event): 
    ans=0 
    numberss=['7','8','9'] 
    omenu2['menu'].delete(0, 'end') 
    for number in numberss: 
     omenu2['menu'].add_command(label=numberss[ans], command=efg) 
     ans=ans+1 


def efg(event=None): 
    print('yee') 

numbers = ['1','2', '3'] 
number=['4','5','6'] 

var = tkinter.StringVar(window) 
var1 = tkinter.StringVar(window) 


omenu = tkinter.OptionMenu(window, var, *numbers, command = abc) 
omenu.grid(row=1) 
omenu2 = tkinter.OptionMenu(window, var1, *number, command = efg) 
omenu2.grid(row=2) 

最初のオプションメニューを入力すると、2番目のオプションメニューが更新されます。 2番目のデータにデータを入力するとコマンドが実行されますが、入力した内容は表示されません。私は、ボタンを含めることを望んでいないと私はコマンドが動作し、2番目にはないことを知っているtkinkerオプションメニューが選択された結果を表示しない

私はこれを実行したときにコマンドは動作しませんでしたそれは

omenu2['menu'].add_command(label=numberss[ans], command=tkinter._setit(var1, number)) 

(私も私は現在、それを理解していない。んが何であるかを知っていただきたいと思います)tkinter.setitに変更しましたので、これはコードの大きな部分から取られており、同じエラーをスローしました

+0

[Tkinter GUI:別のオプションメニューの選択に応じてオプションメニューの選択肢を更新](https://stackoverflow.com/questions/19794069/tkinter-gui-update-choices-ボタンをクリックしたときのOptionMenuのオプションの変更](https://stackoverflow.com/questions/17580218/changing-the-usual-オプションメニュー) options-of-a-optionmenu-when-click-a-button)** tl; dr:**変数を設定する(これはvar1)。 – Lafexlos

答えて

1

StringVar(var1)の新しい値を設定する必要があります。あなたはans(少なくとも、このコードでは)それはアイテムそのものを反復処理するので必要ありませんので、

def abc(event): 
    numberss=['7','8','9'] 
    omenu2['menu'].delete(0, 'end') 
    for number in numberss: 
     omenu2['menu'].add_command(label=number, command=lambda val=number: efg(val)) 

def efg(val, event=None): 
    print('yee') 
    var1.set(val) 

あなたは、forループを使用しています。

+0

私はラムダを見てそれを試して、それは動作しませんでしたが、これは動作します!ありがとうございました!! –

+0

ようこそ。それが助けてくれてうれしい。 – Lafexlos

関連する問題