如何在课堂上获得Tkinter Var的价值?

时间:2015-11-19 14:38:23

标签: python class tkinter

我试图将旧的学校顺序Tkinter代码放入类结构代码中。

所以让我们考虑这个例子:

import Tkinter as Tk

def StartProcess():
    print Text_1_Var.get(), Text_2_Var.get(), Text_3_Var.get()

if __name__ == '__main__':
    MainFrame = Tk.Tk()

    Tk.Button(MainFrame , text = "Start",command=StartProcess).grid(column=2, row=0)
    Tk.Label(MainFrame , text = "1").grid(column=1, row=1)
    Text_1_Var = Tk.StringVar()
    Text_1 = Tk.Entry(MainFrame ,  width=40, textvariable = Text_1_Var).grid(column=2, row=1)
    Tk.Label(MainFrame , text = "2").grid(column=1, row=2)
    Text_2_Var = Tk.StringVar()
    Text_2 = Tk.Entry(MainFrame ,  width=40, textvariable = Text_2_Var).grid(column=2, row=2)
    Tk.Label(MainFrame , text = "3").grid(column=1, row=3)
    Text_3_Var = Tk.StringVar()
    Text_3 = Tk.Entry(MainFrame ,  width=40, textvariable = Text_3_Var).grid(column=2, row=3)
    # etc

    MainFrame.mainloop()

按下"开始"它显示Entry的值从1到3。

现在我重新编码如下:

import Tkinter as Tk

def StartProcess():
    print "???"

class NewEntry(Tk.Frame):
    def __init__(self,master=None,idnumber=None):
        Tk.Frame.__init__(self,master)
        self.pack(side=Tk.TOP)
        self.CreateWidgets(idnumber)
    def CreateWidgets(self,idnumber):
        Tk.Label(master=self, text = idnumber).grid(column=1, row=0)
        self.Text_Var = Tk.StringVar()        
        self.Text = Tk.Entry(master=self,  width=40, textvariable = self.Text_Var).grid(column=2, row=0)

if __name__ == '__main__':
    MainFrame = Tk.Tk()

    Tk.Button(master=MainFrame,text="Start", command=StartProcess).pack()
    for i in range (1, 4): # or more
        NewEntry(master=MainFrame,idnumber=str(i))

    MainFrame.mainloop()
GUI是完全相同的。我希望得到相同的结果,但我不知道我的函数StartProcess应该在哪里发生以及每个self.Text_Var实例的提取值。

1 个答案:

答案 0 :(得分:1)

创建-n对象是不够的;您需要保存对它们的引用,以便以后可以访问它们(例如,从NewEntry)。

StartProcess

然后,entries = [] for i in range (1, 4): # or more e = NewEntry(master=MainFrame,idnumber=str(i)) entries.append(e) # Or more simply, # entries = [NewEntry(master=MainFrame, idnumber=str(i)) for i in range(1,4)] 变成类似

的东西
StartProcess