gpt4 book ai didi

python - 在与菜单相同的窗口中使用菜单命令显示图像

转载 作者:行者123 更新时间:2023-12-01 06:00:05 26 4
gpt4 key购买 nike

我计划为我的程序提供相当多的方法,因此我需要在外部文件中实现这些方法,并在导入文件后将其添加到菜单命令中。但由于菜单命令只接受方法的名称,我不确定如果我的方法接受参数它是否可以工作。下面是在名为 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)

我的想法是在与菜单相同的窗口中显示图像,所以我猜open方法需要使用参数root,这样当在菜单中调用它时,图像将在该窗口中打开。我不确定这是否符合逻辑,但这是我得到的错误:

Exception in Tkinter callback Traceback (most recent call last):
File "D:\Python32\lib\tkinter__init__.py", line 1399, in call return self.func(*args) TypeError: open() takes exactly 1 argument (0 given)

我是 Python 新手,我的问题有点困惑,但我真的需要帮助。谢谢。

已编辑:

感谢有关绑定(bind)的评论,尽管我不确定如何修复它,但是当我将参数添加到称为菜单命令的打开方法时,它可以工作,只是调用该方法而不是分配给命令。如何只调用方法名称但仍包含参数?这对我来说很奇怪。

最佳答案

Thanks for the comment about binding, even though I'm not sure how to fix it, but when I add the parameter to the open method called as menu command, it works except that the method is called instead of being assigned to the command.

而不是使用

menu.add_command(label="Open", myfunc(myarg))

使用

menu.add_command(label="Open", lambda: myfunc(myarg))

这会添加参数,但会等待运行该函数,直到 add_command 决定调用它。

More about lambda

关于python - 在与菜单相同的窗口中使用菜单命令显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com