2017-06-07 3 views
0

1つのオプションメニューの値を変更すると、私のすべてのオプションメニューウィジェットが一緒に更新されています。これは私がすべてのメニュー(self.varself.var = StringVar(master)として初期化される)を作るために使用するものである1つのメニューの値を変更すると、すべてのtkinterオプションメニュが更新されるのはなぜですか?

:私は新しいメニューを作成し、アイテムを変更しようとすると

def makeMenu(self, name, items, r, c): 

    self.var.set(items[0]) 
    name = OptionMenu(self, self.var, *items) 
    name.grid(row = r, column = c , padx = self.pad_x, pady = self.pad_y) 
    name.config(width = self.menu_width) 
    name.menu = Menu(name, tearoff = self.tear_off) 

    for i in range(len(items)): 
     name.menu.add_command(label = items[i]) 

    return name 

、他のメニューすべての項目新しいものにも変更してください。私はこれを行うとき

すなわち:

self.layout_menu = self.makeMenu("layout_menu", self.layout_sections, 
           self.layout_menu_row, self.layout_menu_col) 
+0

が、私は、コードの残りの部分を見ることができる必要がある、あなたがStringVar(master)が必要だと思いませんか? – Stiffy2000

+0

それはたくさんのコードです。あなたは気にしていますか?だから私はTk()ウィンドウのクラスを持っています。上記のように "var"が初期化されます。私は私のクラス内のそれらのparamsとmakeMenu関数を持っています。私のcreateWidgets関数は、パラメータなしで、makeMenuを呼び出して、self.layout_menu = self.makeMenu( "layout_menu"、self.layout_sections、self.row_count、self.col_count)を使用してデフォルトメニューを作成します。だから、私がしようとしているのは、ユーザーがリストボックスから項目をクリックしたときに、これらのメニューが対応する値で更新されるときです。値を更新しようとすると、すべてのメニューがその値で更新されます。 –

+1

@E。 Oregel:Stiffy2000がもっとコードを見たいと思うとき、私は彼が[Minimal、Complete、and Verifiable example](https://stackoverflow.com/help/mcve)を参照していると思います。私たちは全体的な問題を見るためにコードをテストできる必要があります。 –

答えて

0

を私は本当にあなただけStringVar()

+0

これは動作します!ありがとう! –

+0

何が起こったのは、すべてのメニューに対して1つのvar [0]を作成していたことです。つまり、基本的に1つの変数によって制御されていたため、メニューが1つ変更されました。 –

関連する問題