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