如何避免执行未调用的方法



我正在写一个关于图像处理器的代码在Python中。我想用一些图像处理工具打开一个窗口,为了打开图像,我使用了tkinter的filedialog.askopenfile函数。我创建了一个openImage()函数,它向用户询问文件路径,然后用菜单栏和一些帧显示图像,但每次我运行程序时,filedialog.askopenfile函数运行而不调用它,我不知道如何修复它。我需要帮助,因为我已经有这个问题几个小时了:(

这是我的代码:

import tkinter as tk
from tkinter import filedialog
from tkinter.ttk import Label
import cv2
from PIL import Image, ImageTk
import webbrowser
def openImage():
fileLocation = filedialog.askopenfile(initialdir='/', title='Selecciona Un Archivo',
filetypes=(('png files', '*.png'), ('all files', '*.')))
global image
image = cv2.imread(fileLocation)
cv2.waitKey(0)
cv2.destroyAllWindows()

class Main(tk.Tk):
def __init__(self):
super().__init__()

self.title('Programa de Manipulación de Imagenes de JMMS')
self.geometry('600x600')
self.iconbitmap('tools/triforce.ico')
menu = tk.Menu(self)
filemenu = tk.Menu(menu, tearoff=0)
filemenu.add_command(label="Abrir Imagen", command=openImage())
filemenu.add_command(label="Guardar Imagen", command=None)
filemenu.add_separator()
filemenu.add_command(label="Salir", command=self.quit)
menu.add_cascade(label="Archivo", menu=filemenu)
toolsmenu = tk.Menu(menu, tearoff=0)
toolsmenu.add_command(label="Zoom", command=None)
menu.add_cascade(label="Herramientas", menu=toolsmenu)
helpmenu = tk.Menu(menu, tearoff=0)
helpmenu.add_command(label="Contacto", command=None)
menu.add_cascade(label="Ayuda", menu=helpmenu)
self.config(menu=menu)
toolsFrame = tk.Frame(self, width=50, height=600, background='white')
toolsFrame.grid(row=1, column=1)
frame = tk.Frame(self, width=500, height=550, background='gray')
frame.grid(row=1, column=2)
frame3 = tk.Frame(self, width=50, height=600, background='white')
frame3.grid(row=1, column=3)

if __name__ == '__main__':
main = Main()
main.mainloop()

这一行:

filemenu.add_command(label="Abrir Imagen", command=openImage())

openImage后面的括号导致了这个问题。记住,把圆括号放在这里会立即调用函数,导致你看到的效果。那不是你想要的。您希望将函数作为命令传递,以便代码可以在需要时调用它。

所以,你应该在这里只写command=openImage

更明确一点:您拥有的代码将openImage的返回值传递为command,而去掉括号将函数openImage传递为command,因此可以稍后调用。

相关内容

  • 没有找到相关文章

最新更新