2014-03-04 68 views
0

我是新來的蟒蛇,我必須編程某種gui。但是gui由子窗口組成,目前有一個子窗口。在啓動時,子窗口也啓動。它應該等到按鈕被點擊後啓動子窗口。我不知道爲什麼它beheaves這樣....蟒蛇tkinter自動打開子窗口

#!/usr/bin/env python 

from Tkinter import * 
import tkMessageBox as box 
import rospy 


class gui(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent, background="white") 
     self.parent = parent 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Baxter analyse tool") 
      menubar = Menu(self.parent) 
     self.parent.config(menu=menubar) 
      fileMenu = Menu(menubar) 
     submenu = Menu(fileMenu) 
     submenu.add_command(label="camera tool", command=self.camera_window()) 
     submenu.add_command(label="range tool") 
     submenu.add_command(label="control tool") 
     submenu.add_command(label="sonar tool") 
     submenu.add_command(label="quick check tool") 
     fileMenu.add_cascade(label="tools", menu=submenu, underline=0) 
     fileMenu.add_separator() 
     fileMenu.add_command(label="Exit", command=self.onExit) 
     menubar.add_cascade(label="File", menu=fileMenu) 
     menubar.add_command(label="about", command=self.about) 

    def camera_window(self): 
     cameraGui = CameraGui() 

    def about(self): 
     box.showinfo("Baxter","Analyse tool.") 

    def onExit(self): 
     self.quit() 

class CameraGui(object): 
    def __init__(self): 
     self.initUI() 

    def initUI(self): 
     win = Toplevel() 
     Label(win, text="testestest").pack() 
     Button(win, text="hello", command=win.destroy).pack()   

def main(): 
    rospy.init_node('baxter_lput_analyse_tool') 
    root = Tk() 
    root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth()/2, root.winfo_screenheight()-50)) 
    root.focus_set() 
    root.bind("<Escape>", lambda e: e.widget.quit()) 
    app = gui(root) 
    root.mainloop() 

if __name__=='__main__': 
    main() 

程序運行罰款只是它會自動打開的子窗口

回答

2

不要通話功能self.camera_window()。 刪除()。一旦主循環啓動,您的self.camera_window方法就會被調用。

這樣做:

submenu.add_command(label="camera tool", command=self.camera_window)

或者,如果你想發送一些參數,那麼:

submenu.add_command(label="camera tool", command=lambda:self.camera_window(args))

+0

謝謝!那就是訣竅。但爲什麼我不得不刪除括號? – John

+0

,因爲當你包括括號時,你實際上正在調用方法而不是等待'menubutton'被按下 – Gogo

+0

如果對你有幫助 – Gogo