2017-06-10 17 views
-2

TkinterのGUIを開発しようとしています.TkinterのGUIには、最初に株価を入力するcounter_selectionと、株価データをプロットする2つのページがあります。しかし、controller.get_page関数を使用してファーストクラスからのデータ入力を使用しようとすると、Entryで入力された値が返されません。コードは以下の通りです:Tkinterの別のクラスの変数にアクセスできません

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:それは質問には無関係ですので、私はスタートページを入れていない)

+0

StartPageは、コードがそれを呼び出すため、関連しています。それが関係ない場合は、それを使用するすべてのコードを削除します。 –

答えて

0

Why is Tkinter Entry's get function returning nothing?

TL; DR:plot_counterオブジェクトをインスタンス化しながら、entry1.get()への通話は一度だけ行われ、再び呼び出されることはありません。フレームを表示するときに呼び出す関数に入れてみてください。

関連する問題