2017-03-13 29 views
0

我正在嘗試我的第一個程序,並希望如果有人會告訴我什麼是錯的。我寫了這個程序彈出一個屏幕有4個選擇,當我點擊其中一個選擇時,它應該切換屏幕到下一個屏幕,請諮詢我寫錯了什麼,因爲所有我得到的是第一個屏幕,然後什麼都沒有我點擊按鈕謝謝你。任何一個可以幫助找出什麼是缺少這個小程序

這裏是程序

import tkinter as tk 

LARGE_FONT = ("Verdana", 12) 


class SeaofBTCapp(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     container = tk.Frame(self) 



     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     for F in (StartPage, PageOne, PageTwo): 
      frame = F(container, self) 

      self.frames[F] = frame 

      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(StartPage) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 


class StartPage(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     btn1 = tk.Button(text="", fg="white", width=400, height=240, command=lambda : controller.show_frame(PageOne)) 
     btn1["bg"] = "white" 
     mi = tk.PhotoImage(file="C:\\Python\\trials\\pic1.gif") 
     btn1.config(image=mi) 
     btn1.image = mi 

     btn2 = tk.Button(text="", fg="white", width=400, height=240, command=lambda: controller.show_frame(PageTwo)) 
     btn2["bg"] = "white" 
     mi1 = tk.PhotoImage(file="C:\\Python\\trials\\safety.gif") 
     btn2.config(image=mi1) 
     btn2.image = mi1 

     btn3 = tk.Button(text="", fg="white", width=400, height=240) 
     btn3["bg"] = "white" 
     mi2 = tk.PhotoImage(file="C:\\Python\\trials\\count.gif") 
     btn3.config(image=mi2) 
     btn3.image = mi2 

     btn4 = tk.Button(text="", fg="white", width=400, height=240) 
     btn4["bg"] = "white" 
     mi3 = tk.PhotoImage(file="C:\\Python\\trials\\about.gif") 
     btn4.config(image=mi3) 
     btn4.image = mi3 

     btn1.grid(row=0, column=0, columnspan=1, sticky='EW') 
     btn2.grid(row=0, column=1, columnspan=1, sticky='EW') 
     btn3.grid(row=1, column=0, columnspan=1, sticky='EW') 
     btn4.grid(row=1, column=1, columnspan=1, sticky='Ew') 



class PageOne(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="Page One!!!", font=LARGE_FONT) 
     label.grid(pady=10, padx=10) 

     button1 = tk.Button(self, text="Back to Home", 
          command=lambda: controller.show_frame(StartPage)) 
     button1.grid() 

     button2 = tk.Button(self, text="Page Two", 
          command=lambda: controller.show_frame(PageTwo)) 
     button2.grid() 


class PageTwo(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="Page Two!!!", font=LARGE_FONT) 
     label.grid(pady=10, padx=10) 

     button1 = tk.Button(self, text="Back to Home", 
          command=lambda: controller.show_frame(StartPage)) 
     button1.grid() 

     button2 = tk.Button(self, text="Page One", 
          command=lambda: controller.show_frame(PageOne)) 
     button2.grid() 


app = SeaofBTCapp() 
app.mainloop() 

回答

0

你有2個問題:

首先,所有的按鈕都需要有第一個參數「自我」。你在一些地方做過這個,但是你在StartPage類中忘了它。

其次,你需要佈置你的容器。添加pack()初始化後:

container = tk.Frame(self) 
container.pack() 
+0

謝謝你,解決了這個問題 – Gsalama

+0

另外一個問題,如果我想每一個屏幕/頁有其自己的名稱和背景顏色會產生什麼代碼。 – Gsalama

+0

您可以使用'bg'參數向窗口小部件添加背景顏色,如下所示:'tk.Frame .__ init __(self,parent,bg ='green')''。窗口標題只能由根窗口設置,因此您需要創建一個覆蓋'tkraise'的方法:http://pastebin.com/Suvvi5KE注意我還添加了一行以保留'self.controller'。 – Novel

相關問題