2015-07-10 28 views
0

你好我是tkinter和編碼的新手。我正在創建一個名爲谷歌自行車的項目。我找到了一個指導,我希望它通過添加一個開始菜單看起來更好。它使用python,我正在使用tkinter爲它創建一些開始頁面。我正在嘗試創建一個按鈕,以便啓動該程序。這是我用來製作tkinter的代碼,使它看起來很漂亮,有點像開始菜單。使用tkinter作爲另一個python程序的開始菜單

import Tkinter as tk 
from Tkinter import * 
import ttk 

def OpenServer(): 
     execfile("C:/users/Broadway Jewelry/Downloads/server/server2/server.py") 

class Camacho(tk.Tk): 
    def __init__(app):  
     tk.Tk.__init__(app) 
     container = tk.Frame(app, width=800, height=500) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 
     app.frames = {} 

     for F in (StartPage, Instructionspage, OptionsPage, DemoPage): 
      frame = F(container, app) 
      app.frames[F] = frame 
      frame.grid(row=0, column=0, sticky="nsew") 

     app.show_frame(StartPage) 

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

class StartPage(Frame): 
    def __init__(app, parent, controller): 
     Frame.__init__(app, parent, background='black', width=800, height=500) 
     earth = tk.PhotoImage(file="C:/Users/Broadway Jewelry/Desktop/Bluestamp/earth.gif") 
     BGlabel = tk.Label(app,image=earth) 
     BGlabel.image = earth 
     BGlabel.place(x=300,y=0,width=400,height=400) 

     StartProgram = Button(app, text="Start Google Bike", 
          bd=10, command=OpenServer) 
     StartProgram.place(x=100,y=75,width=200,height=44) 

     Instructions = Button (app, text="Instructions", bd=10, 
          command=lambda: controller.show_frame(Instructionspage)) 
     Instructions.place(x=100,y=150,width=200,height=44) 


     Options = Button (app, text="Options/Setup", bd=10, 
         command=lambda: controller.show_frame(OptionsPage)) 
     Options.place(x=100,y=225,width=200,height=44) 

     Quit = Button (app, text="Exit Program", command=quit, bd=10) 
     Quit.place(x=100,y=300,width=200,height=44) 

class Instructionspage(Frame): 
    def __init__(app, parent, controller): 
     Frame.__init__(app, parent, background='black', width=800, height=500) 

     label = tk.Label(app, text="Instructions\n \nPedal=go forward\npress button=reverse\nbutton side to steer", 
        font=(200), background='black', fg='white') 
     label.place(x=300,y=0,width=400,height=400) 

     StartProgram = Button(app, text="Start Google Bike", bd=10, command=OpenServer) 
     StartProgram.place(x=100,y=225,width=200,height=44) 

     GoBack = Button (app, text="Go Back", bd=10, 
        command=lambda: controller.show_frame(StartPage)) 
     GoBack.place(x=100,y=300,width=200,height=44) 

class OptionsPage (Frame): 
    def __init__(app, parent, controller): 
      Frame.__init__(app, parent, background='black', width=800, height=500) 

      GoBack = Button (app, text="Go Back", width=50, bd=10, 
         command=lambda: controller.show_frame(StartPage)) 
      GoBack.place(x=100,y=300,width=200,height=44) 

      StartProgram = Button(app, text="Start Google Bike", bd=10, command=OpenServer) 
      StartProgram.place(x=100,y=225,width=200,height=44) 

      ShowDemo = Button (app, text="Show Demo Screen", bd=10, 
          command=lambda: controller.show_frame(DemoPage)) 
      ShowDemo.place(x=100,y=150,width=200,height=44) 

class DemoPage (Frame): 
    def __init__(app, parent, controller): 
      Frame.__init__(app, parent, background='black', width=800, height=500) 
      earth = tk.PhotoImage(file="C:/Users/Broadway Jewelry/Desktop/Bluestamp/Google-Bike.gif") 
      BGlabel = tk.Label(app,image=earth) 
      BGlabel.image = earth 
      BGlabel.place(x=300,y=0,width=400,height=400) 

      GoBack = Button (app, text="Go Back", width=50, bd=10, 
        command=lambda: controller.show_frame(OptionsPage)) 
      GoBack.place(x=100,y=300,width=200,height=44) 


app = Camacho() 
app.mainloop() 

我想找到一些方法來關閉tkinter窗口,只是讓python運行谷歌自行車。如果有人可以幫助我非常感謝你

回答

0

只需添加一個單行OpenServer(這似乎是運行真正的程序功能):

def OpenServer(): 
    execfile("C:/users/Broadway Jewelry/Downloads/server/server2/server.py") 
    app.destroy() 

我也建議,在任何給定的類內,您將該類的一個實例稱爲標準self而不是app。實際上,它給人的印象是,在程序結束時實例化的對象Camacho正在被傳遞,並被其名稱app引用。但實際情況並非如此:在Camacho,app可能指的是任何Camacho對象,即使您做了類似test = Camacho()的事情。在Camacho之內,那個test對象將自己稱爲app。在其他類中,它更具誤導性,因爲名爲app的對象實際上並不是app,而是controller

困惑?即使我覺得它很混亂 - 這就是爲什麼最好使用self,並避免在多個作用域中使用相同的表觀變量名稱。

相關問題