2017-06-07 1 views
0

Tous mes widgets de menu option sont mis à jour ensemble lorsque je change les valeurs du menu 1 option.Pourquoi toutes mes options tkinter sont-elles mises à jour lorsque je change les valeurs d'un menu?

C'est ce que j'utilise pour faire tous les menus (self.var est initialisé comme self.var = StringVar(master)):

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 

Lorsque je tente de faire un nouveau menu et modifier les éléments, tous les articles des autres menus changer pour les nouveaux aussi.

dire quand je fais ceci:

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

Puis-je voir le reste du code? – Stiffy2000

+0

C'est beaucoup de code. lol Est-ce que ça vous dérange de spécifier? J'ai donc une classe pour ma fenêtre Tk(). "var" est initialisé comme indiqué ci-dessus. J'ai cette fonction makeMenu avec ces paramètres dans ma classe. Ma fonction createWidgets, sans params, appelle makeMenu pour rendre le menu par défaut en utilisant self.layout_menu = self.makeMenu ("layout_menu", self.layout_sections, self.row_count, self.col_count). Donc ce que j'essaye de faire est quand l'utilisateur clique sur un article d'une liste, ces menus sont mis à jour avec les valeurs correspondantes. Lorsque j'essaie d'en mettre un à jour avec une valeur, tous les menus sont mis à jour avec la valeur –

+1

@E. Oregel: Quand Stiffy2000 demande à voir plus de code, je crois qu'il fait référence à [Exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve). Nous devons être en mesure de tester le code pour voir le problème global. –

Répondre

0

Je ne pense pas que vous avez besoin StringVar(master), vous avez juste besoin StringVar()

+0

Cela fonctionne! Merci! –

+0

Ce qui s'est passé était qu'il était en train de créer un var [0] pour tous mes menus, ce qui voulait dire qu'ils étaient tous contrôlés par une seule variable, donc chaque fois qu'un menu changeait, les autres changeaient aussi. –