2015-11-19 50 views
0

我正在尝试将老式顺序Tkinter代码放入类结构代码中。如何从课堂上获得Tkinter Var的价值?

因此,让我们考虑这个例子:

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

在按 “开始”,它显示输入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

仅仅创建一个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变得像

def StartProcess(): 
    strings = [x.Text_Var.get() for x in entries] 
    print " ".join(strings) 
+0

轻松!我不认为我们可以做Tkinter物品清单。这非常方便。谢谢。 – Syrius