2012-06-02 70 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() 

你們這樣做是正確的,雖然退出按鈕!

相關問題