无法从Tkinter中的另一个类访问该变量

时间:2017-06-10 12:16:43

标签: python tkinter

我正在尝试开发一个包含两个页面的Tkinter GUI,第一个用于输入股票名称(counter_selection),第二个用于绘制股票价格数据。但是,当我尝试使用controller.get_page函数从第一个类中使用数据输入时,它不会返回Entry输入的值。代码如下:

class Application(Tk.Tk):
    '''A GUI Application for FCN Demo'''

    def __init__(self):
        '''Initialization of frame'''
        Tk.Tk.__init__(self)
        container = Tk.Frame(self)
        container.pack(side='top', fill = 'both', expand = True)
        container.grid_rowconfigure(0,weight = 1)
        container.grid_columnconfigure(0,weight = 1)
        self.frames = {}
        for F in (StartPage, counter_selection, plot_counter):

            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row= 0, column = 0, sticky = "nsew")

        self.show_frame(StartPage)

    def get_page(self,classname):
        '''Returns an instace of page given it's class name as a string'''
        for page in self.frames.values():
            if str(page.__class__.__name__) == classname:
                return page
        return None

    def show_frame(self,cont):

        frame = self.frames[cont]
        frame.tkraise()



class counter_selection(Tk.Frame):

    def __init__(self, parent, controller):
        '''This is to create the widgets to input stock'''
        Tk.Frame.__init__(self,parent)
        self.controller = controller
        label1 = Tk.Label(self, text = "Please Enter 3 counter names")
        label1.pack(padx = 10, pady = 10)

        self.entry1 = Tk.Entry(self)
        self.entry1.pack()

        self.entry2 = Tk.Entry(self)
        self.entry2.pack()

        self.entry3 = Tk.Entry(self)
        self.entry3.pack()

        button1 = Tk.Button (self, text = 'Confirm', command = lambda: controller.show_frame(plot_counter))

        button1.pack()

class plot_counter(Tk.Frame):
    '''This is to plot the graph of three selected counters'''
    def __init__(self,parent,controller):
         Tk.Frame.__init__(self,parent)
         self.controller = controller
         counterPage = self.controller.get_page('counter_selection')
         self.counter1 = counterPage.entry1.get()
         self.counter2 = counterPage.entry2.get()
         self.counter3 = counterPage.entry3.get()
         label1 = Tk.Label(self, text = self.counter11)
         label1.pack()

label1 Frame上没有显示任何内容,表明它似乎无法从类中获取值。我的错是什么?

(PS:我没有放入StartPage,因为它与问题无关)

1 个答案:

答案 0 :(得分:0)

Why is Tkinter Entry's get function returning nothing?

TL; DR:在entry1.get()对象实例化时,您对plot_counter的调用只执行一次,而且从未再次调用过。尝试将它放在显示帧时要调用的函数中。