2012-06-02 48 views
3

我遇到了Tkinter菜单的问题。下面是我的gui.py文件的代码:Python Tkinter - 在菜单中添加外部函数作为命令

from tkinter import * 
from SS2 import file 

class AppUI(Frame): 

    def __init__(self, master=None): 
     Frame.__init__(self, master, relief=SUNKEN, bd=2) 

     self.menubar = Menu(self) 

     menu = Menu(self.menubar, tearoff=0) 
     self.menubar.add_cascade(label="File", menu=menu) 
     menu.add_command(label="Open", command=file.open()) 
     menu.add_command(label="Save") 
     menu.add_command(label="Save as...") 
     menu.add_command(label="Exit", 
         command=root.quit) 

     menu = Menu(self.menubar, tearoff=0) 
     self.menubar.add_cascade(label="Image", menu=menu) 
     menu.add_command(label="Size") 
     menu.add_command(label="Rotate") 
     menu.add_command(label="Crop") 

     menu = Menu(self.menubar, tearoff=0) 
     self.menubar.add_cascade(label="Color", menu=menu) 

     menu = Menu(self.menubar, tearoff=0) 
     self.menubar.add_cascade(label="Filter", menu=menu) 
     menu.add_command(label="Blur") 
     menu.add_command(label="Contour") 
     menu.add_command(label="Emboss") 
     menu.add_command(label="Smooth") 
     menu.add_command(label="Sharpen") 

     menu = Menu(self.menubar, tearoff=0) 
     self.menubar.add_cascade(label="Help", menu=menu) 
     menu.add_command(label="About") 

     try: 
      self.master.config(menu=self.menubar) 
     except AttributeError: 
      # master is a toplevel window (Python 1.4/Tkinter 1.63) 
      self.master.tk.call(master, "config", "-menu", self.menubar) 

     self.canvas = Canvas(self, bg="white", width=400, height=400, 
          bd=0, highlightthickness=0) 
     self.canvas.pack() 


root = Tk() 

app = AppUI(root) 
app.pack() 

root.mainloop() 

这里是我的file.py代码:

from tkinter import * 
from tkinter.filedialog import askopenfilename 

def open(): 
    filename = askopenfilename(filetypes=[("allfiles","*"),("imagesfiles","*.png")]) 

的问题是,当我运行gui.py文件时,文件对话总是出现在菜单之前,当我关闭并尝试通过打开菜单访问它时,什么都不会发生。我在这里做错了什么?请提前帮助和感谢。

回答

2

命令应该给出方法的名称。你在做什么是调用的方法。然后Tkinter将使用该方法的返回值作为按钮命令。解决方案:省略括号。

..., command=file.open 

代替

..., command=file.open() 

你们这样做是正确的,虽然退出按钮!

相关问题