簡體   English   中英

tkinter驗證for循環中的多個條目

[英]tkinter validate multiple entry in for loop

我用for循環創建了多個條目,我必須驗證條目值。 如果這些值很好,我想在一個類中更新它們,該類具有相同的功能ValidaFinanziatori ,按下按鈕即可調用該功能。

我在for循環中創建了上述按鈕:它應該向函數傳遞一個索引,以便我可以從字典中的列表中組織的每個條目小部件中獲取值。

但該按鈕僅適用於最后一個條目。 有人可以幫我嗎?

class FinanziatoriSemplici(tk.Frame, FinanziatoreSemplice):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.numero_utenti=tk.IntVar()
        self.Finanziatori_Semplici = [] 

        self.labels_finanziatori = {
            'principale': [],
            'capitale_investito': [], 
            'tasso': [], 
            'tempo': []
            }

        self.entry_finanziatori = {
            'capitale_investito': [], 
            'tasso': [], 
            'tempo': []
            }
        tk.Label(self, text="Configurare I Finanziatori", font=controller.title_font).grid(row=0, column = 0)
        tk.Label(self, text="Inserire il numero di utenti da configurare").grid(row=1, column = 0)
        self.entry_utenti = tk.Entry(self, text="Inserire numero Utenti", textvariable = self.numero_utenti)
        self.entry_utenti.grid(row=1, column=1)
        self.btn_utenti = tk.Button(self, text="OK", command= lambda: InizializzaUtenti(self.entry_utenti.get()))
        self.btn_utenti.grid(row=1, column=2)

        def ValidaFinanziatore(i):
                print(self.entry_finanziatori['capitale_investito'][i].get())
                #string_cap =self.entry_finanziatori['capitale_investito'][i].get()
                #int_cap = int(string_cap)
                #print(str(int_cap))

        def InizializzaUtenti(num):    
            self.numero_utenti = int(num)
            self.capitale = []
            self.cap = tk.IntVar()
        
            k=2
            print("k vale: "+str(k))
            for i in range(0, self.numero_utenti):
                print("inizio il ciclo numero: "+str(i))
                #MAIN label del finanziatore
                self.labels_finanziatori['principale'].append(tk.Label(self, text="Dati finanziatore numero "+str(i+1)))
                self.labels_finanziatori['principale'][i].grid(row=i*k+3, column = 0)
                k = k+1
                #Label capitale investito
                self.labels_finanziatori['capitale_investito'].append(tk.Label(self, text="Dati sul capitale investito del finanziatore "+str(i+1)))
                self.labels_finanziatori['capitale_investito'][i].grid(row=i*k+4, column = 0, sticky= "W")
                #Entry widget capitale investito
                self.entry_finanziatori['capitale_investito'].append(tk.Entry(self, text = "Inserire il Capitale investito dal finanziatore "+str(i+1), textvariable= tk.IntVar()))
                self.entry_finanziatori['capitale_investito'][i].insert(tk.END,0)
                self.entry_finanziatori['capitale_investito'][i].grid(row=i*k+4, column = 1)
                
                #capitale[i] = self.entry_finanziatori['capitale_investito'].get()
                k= k+1
                #Label Tasso di interesse############################
                self.labels_finanziatori['tasso'].append(tk.Label(self, text="Dati sul tasso di interesse del finanziatore "+str(i+1)))
                self.labels_finanziatori['tasso'][i].grid(row=i*k+5, column = 0,sticky= "W")
                
                print("prima del widget tasso i vale: "+str(i))
                #Entry widget tasso
                self.entry_finanziatori['tasso'].append(tk.Entry(self, text = "Inserire il tasso per il finanziatore "+str(i+1)))
                self.entry_finanziatori['tasso'][i].grid(row=i*k+5, column = 1)
                self.entry_finanziatori['tasso'][i].insert(tk.END, 0)
                
                print("dopo il widget i vale: "+str(i))
                k= k+1
                ############################## N.B. L'ultima label ha pady
                #Label Tempo di ritorno 
                self.labels_finanziatori['tempo'].append(tk.Label(self, text="Inserire il tempo di ritorno per l'investimento per il finanziatore "+str(i+1), anchor='w'))
                self.labels_finanziatori['tempo'][i].grid(row=i*k+6, column = 0, pady=(0, 10), sticky= "W")
                #Entry widget tempo
                self.entry_finanziatori['tempo'].append(tk.Entry(self, text = "Inserire il tempo di ritorno per l'investimento "+str(i+1)))
                self.entry_finanziatori['tempo'][i].grid(row=i*k+6, column = 1, pady=(0, 10))
                self.entry_finanziatori['tempo'][i].insert(tk.END, 0)

                validate = tk.Button(self, text="valida soggetto" +str(i), command = lambda:  ValidaFinanziatore(i))
                validate.grid(row=i*k+6, column = 2, pady=(0, 10))
                #Validate button                
                #validate = tk.Button(self, text="Valida soggetto" +str(i+1), command = lambda: ValidaFinanziatore(i))
                #validate.grid(row=i*k+6, column = 2, pady=(0, 10))
                k= k+1

validate = tk.Button(self, text="valida soggetto" +str(i), command = lambda i=i: ValidaFinanziatore(i)
validate.grid(row=i*k+6, column = 2, pady=(0, 10))

lambda i=i: ValidaFinanziatore(i)做你想要的工作..

lambda: ValidaFinanziatore(i))將在每次進行循環時將i分配給 Button。 所以要么每個按鈕都會做最后分配的工作,要么不會工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM