python - tkinter 验证 for 循环中的多个条目
问题描述
我用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。所以每个按钮要么完成最后分配的工作,要么不工作
推荐阅读
- node.js - 如何从事件中导入变量
- python - 如何使用 boto3.resource 备份 DynamoDB
- powerbi - Power BI 中的总计错误
- regex - 正则表达式保留所有括号“)”
- jquery - 无法在下拉“TypeError:selectobject.selected is undefined”中获取所选选项的文本
- reactjs - React 脚本标签内的 data-client-key
- man-in-the-middle - aircrack-ng 和 MITMf 可以与 Evil Twin 攻击一起使用吗?
- amazon-web-services - 解析器中的 AWS Appsync $ctx 与 $context
- matlab - ode15i 因尺寸而出错,这是什么意思?
- sql - Oracle 查询消除了不考虑 Null 的重复项