使用tkinter按钮

时间:2017-10-01 09:22:50

标签: python list button lambda tkinter

我在按下按钮时尝试从列表到类的多个实例名称,我想同时使用从输入字段中的用户输入的值来执行多个数学方程式。

例如: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()

1 个答案:

答案 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()