我在按下按钮时尝试从列表到类的多个实例名称,我想同时使用从输入字段中的用户输入的值来执行多个数学方程式。
例如:aud_non_comm_short / aud_non_comm_long& cad_non_comm_short / cad_non_comm_long并在标签中显示两者的结果。
我在使用lambda通过按钮传递值时遇到问题:
from tkinter import *
from tkinter import ttk
class CoTValues:
def non_comm_short(self, master, e_row):
self.master = master
self.e_row = e_row
self.non_comm_short = IntVar()
entry = Entry(self.master, textvariable=self.non_comm_short, width="9")
entry.grid(row=self.e_row, column="1", padx="5", pady="5")
def non_comm_long(self, master, e_row):
self.master = master
self.e_row = e_row
self.non_comm_long = IntVar()
entry = Entry(self.master, textvariable=self.non_comm_long, width="9")
entry.grid(row=self.e_row, column="2", padx="5", pady="5")
def display_data(self):
print(self.non_comm_short.get())
print(self.non_comm_long.get())
root = Tk()
root.minsize(width="500", height="500")
aud_non_comm_short = CoTValues()
aud_non_comm_short.non_comm_short(root, 1)
aud_non_comm_long = CoTValues()
aud_non_comm_long.non_comm_long(root, 1)
cad_non_comm_short = CoTValues()
cad_non_comm_short.non_comm_short(root, 2)
cad_non_comm_long = CoTValues()
cad_non_comm_long.non_comm_long(root, 2)
var_name = [aud_non_comm_short, aud_non_comm_long]
btn = ttk.Button(root, text="Submit", command=lambda: for x in range(len(var_name): var_name[x].display_data())
btn.grid(row="4", column="3")
root.mainloop()
答案 0 :(得分:0)
你弄乱了变量和函数的命名,因为你将它们命名为相同。 lambda按钮调用对我不起作用所以我改变了函数。这样做可以,但这是一个肮脏的解决方案。所以你可以简单地改进它。
from tkinter import *
from tkinter import ttk
class CoTValues:
def define_non_comm_short(self, master, e_row):
self.master = master
self.e_row = e_row
self.non_comm_short = IntVar()
self.entry = Entry(self.master, textvariable=self.non_comm_short, width="9")
self.entry.grid(row=self.e_row, column="1", padx="5", pady="5")
def define_non_comm_long(self, master, e_row):
self.master = master
self.e_row = e_row
self.non_comm_long = IntVar()
self.entry = Entry(self.master, textvariable=self.non_comm_long, width="9")
self.entry.grid(row=self.e_row, column="2", padx="5", pady="5")
def display_data(self, var_name):
for v in var_name:
print('')
print(v.entry.get())
print("-------------")
#--------------------------
def button_func(var_name):
aud_non_comm_short.display_data(var_name)
#---------- main ----------
root = Tk()
root.minsize(width="500", height="500")
aud_non_comm_short = CoTValues()
aud_non_comm_short.define_non_comm_short(root, 1)
aud_non_comm_long = CoTValues()
aud_non_comm_long.define_non_comm_long(root, 1)
cad_non_comm_short = CoTValues()
cad_non_comm_short.define_non_comm_short(root, 2)
cad_non_comm_long = CoTValues()
cad_non_comm_long.define_non_comm_long(root, 2)
var_name = [aud_non_comm_short, aud_non_comm_long]
btn = ttk.Button(root, text="Submit", command= lambda: button_func(var_name))
btn.grid(row="4", column="3")
root.mainloop()