tkinter验证for循环中的多个条目

c9x0cxw0  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(422)

我创建了多个具有 for 循环,我必须验证输入值。如果值是好的,我想用相同的函数在类中更新它们 ValidaFinanziatori 只需按下一个按钮即可调用。
我在 for 循环:它应该传递给函数一个索引,这样我就可以从字典中按列表组织的每个条目小部件中获取值。
但该按钮仅适用于最后一个条目。谁能帮帮我吗?

  1. class FinanziatoriSemplici(tk.Frame, FinanziatoreSemplice):
  2. def __init__(self, parent, controller):
  3. tk.Frame.__init__(self, parent)
  4. self.controller = controller
  5. self.numero_utenti=tk.IntVar()
  6. self.Finanziatori_Semplici = []
  7. self.labels_finanziatori = {
  8. 'principale': [],
  9. 'capitale_investito': [],
  10. 'tasso': [],
  11. 'tempo': []
  12. }
  13. self.entry_finanziatori = {
  14. 'capitale_investito': [],
  15. 'tasso': [],
  16. 'tempo': []
  17. }
  18. tk.Label(self, text="Configurare I Finanziatori", font=controller.title_font).grid(row=0, column = 0)
  19. tk.Label(self, text="Inserire il numero di utenti da configurare").grid(row=1, column = 0)
  20. self.entry_utenti = tk.Entry(self, text="Inserire numero Utenti", textvariable = self.numero_utenti)
  21. self.entry_utenti.grid(row=1, column=1)
  22. self.btn_utenti = tk.Button(self, text="OK", command= lambda: InizializzaUtenti(self.entry_utenti.get()))
  23. self.btn_utenti.grid(row=1, column=2)
  24. def ValidaFinanziatore(i):
  25. print(self.entry_finanziatori['capitale_investito'][i].get())
  26. #string_cap =self.entry_finanziatori['capitale_investito'][i].get()
  27. #int_cap = int(string_cap)
  28. #print(str(int_cap))
  29. def InizializzaUtenti(num):
  30. self.numero_utenti = int(num)
  31. self.capitale = []
  32. self.cap = tk.IntVar()
  33. k=2
  34. print("k vale: "+str(k))
  35. for i in range(0, self.numero_utenti):
  36. print("inizio il ciclo numero: "+str(i))
  37. #MAIN label del finanziatore
  38. self.labels_finanziatori['principale'].append(tk.Label(self, text="Dati finanziatore numero "+str(i+1)))
  39. self.labels_finanziatori['principale'][i].grid(row=i*k+3, column = 0)
  40. k = k+1
  41. #Label capitale investito
  42. self.labels_finanziatori['capitale_investito'].append(tk.Label(self, text="Dati sul capitale investito del finanziatore "+str(i+1)))
  43. self.labels_finanziatori['capitale_investito'][i].grid(row=i*k+4, column = 0, sticky= "W")
  44. #Entry widget capitale investito
  45. self.entry_finanziatori['capitale_investito'].append(tk.Entry(self, text = "Inserire il Capitale investito dal finanziatore "+str(i+1), textvariable= tk.IntVar()))
  46. self.entry_finanziatori['capitale_investito'][i].insert(tk.END,0)
  47. self.entry_finanziatori['capitale_investito'][i].grid(row=i*k+4, column = 1)
  48. #capitale[i] = self.entry_finanziatori['capitale_investito'].get()
  49. k= k+1
  50. #Label Tasso di interesse############################
  51. self.labels_finanziatori['tasso'].append(tk.Label(self, text="Dati sul tasso di interesse del finanziatore "+str(i+1)))
  52. self.labels_finanziatori['tasso'][i].grid(row=i*k+5, column = 0,sticky= "W")
  53. print("prima del widget tasso i vale: "+str(i))
  54. #Entry widget tasso
  55. self.entry_finanziatori['tasso'].append(tk.Entry(self, text = "Inserire il tasso per il finanziatore "+str(i+1)))
  56. self.entry_finanziatori['tasso'][i].grid(row=i*k+5, column = 1)
  57. self.entry_finanziatori['tasso'][i].insert(tk.END, 0)
  58. print("dopo il widget i vale: "+str(i))
  59. k= k+1
  60. ############################## N.B. L'ultima label ha pady
  61. #Label Tempo di ritorno
  62. 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'))
  63. self.labels_finanziatori['tempo'][i].grid(row=i*k+6, column = 0, pady=(0, 10), sticky= "W")
  64. #Entry widget tempo
  65. self.entry_finanziatori['tempo'].append(tk.Entry(self, text = "Inserire il tempo di ritorno per l'investimento "+str(i+1)))
  66. self.entry_finanziatori['tempo'][i].grid(row=i*k+6, column = 1, pady=(0, 10))
  67. self.entry_finanziatori['tempo'][i].insert(tk.END, 0)
  68. validate = tk.Button(self, text="valida soggetto" +str(i), command = lambda: ValidaFinanziatore(i))
  69. validate.grid(row=i*k+6, column = 2, pady=(0, 10))
  70. #Validate button
  71. #validate = tk.Button(self, text="Valida soggetto" +str(i+1), command = lambda: ValidaFinanziatore(i))
  72. #validate.grid(row=i*k+6, column = 2, pady=(0, 10))
  73. k= k+1
8zzbczxx

8zzbczxx1#

使用

  1. validate = tk.Button(self, text="valida soggetto" +str(i), command = lambda i=i: ValidaFinanziatore(i)
  2. validate.grid(row=i*k+6, column = 2, pady=(0, 10))
  3. ``` `lambda i=i: ValidaFinanziatore(i)` 你想做什么工作。。
  4. 但是 `lambda: ValidaFinanziatore(i))` 将分配 `i` 每次循环一次时,都要按此按钮。因此,要么每个按钮都将执行最后分配的工作,要么不工作

相关问题