J'essaie d'éviter de multiplier des fonctions dans le code en utilisant
import tkinter as tk from tkinter import * class WINDOW(): def __init__(self): self.Settings_Window() def Settings_Window(self): self.settings_window = tk.Tk() self.settings_window.minsize(200,200) self.entry = Entry(self.settings_window) self.entry.pack() self.entry2 = Entry(self.settings_window) self.entry2.pack() self.label1input = StringVar() self.label = Label(self.settings_window,textvariable=self.label1input, bg='yellow') self.label.pack(expand='yes',fill='x') self.label2input = StringVar() self.label2 = Label(self.settings_window, textvariable=self.label2input, bg='yellow') self.label2.pack(expand='yes', fill='x') self.button = Button(self.settings_window,text='SETUP1',command=self.Next) self.button.pack() self.button2 = Button(self.settings_window,text='SETUP2',command=self.Next2) self.button2.pack() self.settings_window.mainloop() def Next(self): self.number=1 self.Return_Label(self.number) def Next2(self): self.number=2 self.Return_Label(self.number) def Return_Label(self,number): self.entry_field_value = self.entry.get() print(self.entry_field_value) #self.label1input.set(self.entry_field_value) setattr(self,'label'+str(number)+'input.set',self.entry_field_value) window=WINDOW()
3 Réponses :
Créer listes em> d'objets plutôt que des attributs individuels pour chaque objet. Par exemple,
Vrai. C'était un exemple rapide et sale visant à faire preuve de mon point sur une utilisation variable. Merci de votre contribution.
Les noms de variable informatique dynamiquement doivent être évités à tout prix. Ils sont difficiles à faire correctement, et cela rend votre code difficile à comprendre, difficile à maintenir et difficile à déboguer.
Au lieu de cela, stockez les widgets dans un dictionnaire ou une liste. Par exemple: p> Cependant, vous n'avez vraiment pas besoin d'utiliser stringvar code> du tout - ils ont généralement ajouté des frais généraux supplémentaires sans fournir de supplément évaluer. Vous pouvez enregistrer les étiquettes au lieu des variables et appeler
configuration code> sur les étiquettes p>
Je préfère une approche de liste pour gérer plusieurs champs d'entrée et mettre à jour les valeurs. En utilisant la liste, vous pouvez également utiliser la valeur d'index pour gérer également les étiquettes: d.
Voir l'exemple ci-dessous de la manière dont vous pouvez utiliser la liste pour faire face à toutes les valeurs et mises à jour. P>
import tkinter as tk from tkinter import * class Window(tk.Tk): def __init__(self): super().__init__() self.minsize(200, 200) self.entry_list = [] self.label_list = [] entry_count = 2 for i in range(entry_count): self.entry_list.append(Entry(self)) self.entry_list[i].pack() for i in range(entry_count): self.label_list.append(Label(self,bg='yellow')) self.label_list[i].pack(expand='yes', fill='x') Button(self, text='SETUP', command=self.Return_Label).pack() def Return_Label(self): for ndex, lbl in enumerate(self.label_list): lbl.config(text=self.entry_list[ndex].get()) if __name__ == '__main__': Window().mainloop()
Voulez-vous dire que vous voulez dire
getattr (auto, 'étiquette' + str (numéro) + 'Entrée'). SET (Self.Endry_field_Value) code>?
Les listes et les dicts sont votre ami.
getattr ... fonctionne. Merci. Bien que pleinement conviennent que le code devrait être plus court / nitre