我计划为我的程序提供很多方法,所以我需要在外部文件中实现这些方法,并在导入文件后将其添加到菜单命令中。但是因为菜单命令只接受方法的名称,所以如果我的方法接受参数,我不确定它是否可以工作。下面是在名为file.py的文件中显示图像的代码:
from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import Image, ImageTk
def open(root):
filename = askopenfilename(filetypes=[("all files","*"),("Bitmap Files","*.bmp; *.dib"),
("JPEG", "*.jpg; *.jpe; *.jpeg; *.jfif"),
("PNG", "*.png"), ("TIFF", "*.tiff; *.tif")])
image = Image.open(filename)
image1 = ImageTk.PhotoImage(open(filename))
root.geometry("%dx%d+%d+%d" % (image.size[0], image.size[1], 0, 0))
panel = Label(root, image = image1)
panel.pack(side='top', fill='both', expand='yes')
panel.image = image1
我还有一个名为gui.py的文件,我在命令中调用上面打开的方法。所以我这样做了:
menu.add_command(label="Open", command=file.open)
我的想法是在与菜单相同的窗口中显示图像,所以我猜方法打开需要采用参数root,所以当在菜单中调用它时,图像将在该窗口中打开。我不确定这是不是逻辑,但这是我得到的错误:
Tkinter回调中的异常回溯(最近一次调用最后一次):
文件“D:\ Python32 \ lib \ tkinter__init __。py”,第1399行,调用 return self.func(* args)TypeError:open()只取1个参数(0给定)
我是Python的新手,我的问题有点乱,但我真的需要帮助。感谢。
编辑:
感谢有关绑定的注释,即使我不确定如何修复它,但是当我将参数添加到名为menu命令的open方法时,它的工作原理除了调用方法而不是分配给命令。如何仅调用方法的名称但仍包含参数?这对我来说很奇怪。
答案 0 :(得分:2)
感谢有关绑定的注释,即使我不确定如何修复它,但是当我将参数添加到名为menu命令的open方法时,它的工作原理除了调用方法而不是分配给命令。
而不是使用
menu.add_command(label="Open", myfunc(myarg))
使用
menu.add_command(label="Open", lambda: myfunc(myarg))
这会添加参数,但等待运行该函数,直到add_command决定调用它。