2016-12-03 85 views
-1

我想製作一個3頁的GUI。起始頁面有一個標題和一個開始按鈕。當按下開始按鈕時,將顯示PageOne,5秒後顯示PageTwo。然而,現在它以不同的方式工作:單擊按鈕時,等待5秒鐘,並保持開始頁面。然後顯示PageOne和PageTwo,我只能看到PageTwo。
有人會告訴我如何解決這個問題?非常感謝。延遲後的tkinter顯示幀

import tkinter as tk 
import time 

class MyApp(tk.Tk): 
    def __init__(self, height, width): 
     tk.Tk.__init__(self) 
     self.geometry('{}x{}'.format(height, width)) 
     self.resizable(width=False, height=False) 
     self.container = tk.Frame(self) 
     self.container.pack(side=tk.TOP, fill=tk.BOTH, expand=True) 
     self.container.grid_rowconfigure(0, weight=1) 
     self.container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 
     for f in [StartPage, PageOne, PageTwo]: 
      self.frames[f] = f(self.container, self) 
      self.frames[f].config(height=height) 
      self.frames[f].config(width=width) 
      self.frames[f].grid(row=0, column=0, sticky="nsew") 
     self.show_frame(StartPage) 

    def show_frame(self, page): 
     self.frames[page].tkraise() 



class StartPage(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.parent = parent 
     self.controller = controller 
     self.create_widgets() 

    def create_widgets(self): 
     self.instruction = tk.Label(self, text='My Title') 
     self.instruction.config(font=("Courier", 20)) 
     self.instruction.place(relx=0.5, rely=0.3, anchor=tk.CENTER) 
     self.button = tk.Button(self, text = 'START', command=self.click_start) 
     self.button.place(relx=0.5, rely=0.5, anchor=tk.CENTER) 

    def click_start(self): 
     # show PageOne 
     self.controller.show_frame(PageOne) 
     # wait for 5 seconds 
     time.sleep(5) 
     # show PageTwo 
     self.controller.show_frame(PageTwo) 

class PageOne(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.parent = parent 
     self.controller = controller 
     self.create_widgets() 

    def create_widgets(self): 
     self.label = tk.Label(self,text='PageOne') 
     self.label.config(font=("Courier", 20)) 
     self.label.place(relx=0.4, rely=0.4, anchor=tk.CENTER) 

class PageTwo(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.parent = parent 
     self.controller = controller 
     self.create_widgets() 

    def create_widgets(self): 
     self.label = tk.Label(self, text='PageTwo') 
     self.label.config(font=("Courier", 30)) 
     self.label.place(relx=0.5, rely=0.5, anchor=tk.CENTER) 

if __name__ == '__main__':   
    root = MyApp(height=500, width=500) 
    root.mainloop() 
+0

能否請您提供一個最小的,完整的和可覈查的例子(https://stackoverflow.com/help/mcve),這樣我們就可以看到你的問題? –

+0

我們不能運行你的代碼 - 它取決於一個名爲'BestModel'的類,它不是你發佈的內容的一部分。請僅發佈_only_重現問題所需的內容,但請發佈重現此問題所必需的_everything_。 –

回答

1

您可以使用小部件方法after來安排未來事件。第一個參數是毫秒數,下一個參數是對函數的引用,並且任何附加參數都將傳遞給該函數。

def click_start(self): 
    self.controller.show_frame(PageOne) 
    self.controller.after(5000, self.controller.show_frame, PageTwo)