0

基本的に、ボタンを押すとウィンドウに何かが追加されるボタンが必要です。最小限のコードは次のとおりです。

from Tkinter import *

def create_line (N):
    """ """
    Label (root, text= "Color ").grid(row=N, column=0, padx=3)
    OptionMenu (root, v, *optionList).grid(row=N, column=1, padx=3)
    Button (root, text="+", command=add_line(N)).grid(row=N, column=2, padx=3)

def add_line (M):
    M = M +1
    Label (root, text= "Color ").grid(row=M, column=0, padx=3)
    OptionMenu (root, v, *optionList).grid(row=M, column=1, padx=3).grid(row=M,     
                 column=2, padx=3)
    return 1

root = Tk()
optionList = ("red", "green", "blue")
current_row = 0
v = StringVar()
v.set(optionList[0])
create_line(current_row)
mainloop()

add_line関数内のコード(戻り行を除く)をコメントアウトしてコードを実行すると、ラベル、オプションメニュー、およびボタンが表示されます。「+」ボタンで同じウィジェットを使用して別の行を作成したいと思います。この最小限のコードは私の実際のアプリではありませんが、これは私ができないことの核心です。

ボタンを押すとメニューオプションを動的に変更するアプリをダウンロードしたので、それができることはわかっていますが、そのテクニックはうまくいかないようです。

ありがとう。

4

1 に答える 1

2

私がすぐに目にする問題の1つは、次のとおりです。

Button (root, text="+", command=add_line(N)).grid(row=N, column=2, padx=3)

する必要があります:

Button (root, text="+", command=lambda:add_line(N)).grid(row=N, column=2, padx=3)

add_line書かれているように、ボタンが押されたときではなく、ボタンが作成されたときに関数を呼び出しています。

于 2012-11-07T05:32:30.890 に答える