通过 python 中的构造函数将函数作为 class 函数传递
Pass a function as a class function through constructor in python
我正在尝试在 python 中创建一个 class,它允许您通过构造函数传递已执行的 onclick 代码。到目前为止:
import tkinter as tk
import PIL
from PIL import ImageTk, Image
class closeIcon:
path = ""
width = 0
height = 0
xpos = 0
ypos = 0
onclick = 0
canv = ""
def __init__(self, path, width, height, xpos, ypos, onclick, canv):
self.path = path
self.width = width
self.height = height
self.xpos = xpos
self.ypos = ypos
self.onclick = onclick
self.canv = canv
self.img = Image.open(self.path).resize((self.width, self.height), Image.ANTIALIAS)
self.img_ = ImageTk.PhotoImage(self.img)
self.label = tk.Label(self.canv, image=self.img_, bg=self.canv["background"])
self.label.place(x=xpos, y=ypos)
self.label.bind("<Button-1>", self.onclick)
我如何从 class 中实例化对象的示例:
closeAppIcon = closeIcon("assets/cross1.png", 30, 30, winWidth-45, 10, {print("Hello")}, canvas_)
但是每当我 运行 应用程序时,我什至没有单击图像就在控制台中收到了 Hello,当我单击图像时,我收到以下错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\tkinter_init_.py", line 1883, in call
return self.func(*args)
TypeError: 'set' object is not callable
我做错了什么?
{print("Hello")}
是一个包含元素 None 的集合。您的代码需要在那个地方有一个函数。如果你想传递一个包含语句 print("Hello")
的函数,你可以使用:
lambda *args: print("Hello")
这定义了一个函数,它将接受任意数量的位置参数并打印“Hello”。
我正在尝试在 python 中创建一个 class,它允许您通过构造函数传递已执行的 onclick 代码。到目前为止:
import tkinter as tk
import PIL
from PIL import ImageTk, Image
class closeIcon:
path = ""
width = 0
height = 0
xpos = 0
ypos = 0
onclick = 0
canv = ""
def __init__(self, path, width, height, xpos, ypos, onclick, canv):
self.path = path
self.width = width
self.height = height
self.xpos = xpos
self.ypos = ypos
self.onclick = onclick
self.canv = canv
self.img = Image.open(self.path).resize((self.width, self.height), Image.ANTIALIAS)
self.img_ = ImageTk.PhotoImage(self.img)
self.label = tk.Label(self.canv, image=self.img_, bg=self.canv["background"])
self.label.place(x=xpos, y=ypos)
self.label.bind("<Button-1>", self.onclick)
我如何从 class 中实例化对象的示例:
closeAppIcon = closeIcon("assets/cross1.png", 30, 30, winWidth-45, 10, {print("Hello")}, canvas_)
但是每当我 运行 应用程序时,我什至没有单击图像就在控制台中收到了 Hello,当我单击图像时,我收到以下错误消息:
Exception in Tkinter callback Traceback (most recent call last): File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\tkinter_init_.py", line 1883, in call return self.func(*args) TypeError: 'set' object is not callable
我做错了什么?
{print("Hello")}
是一个包含元素 None 的集合。您的代码需要在那个地方有一个函数。如果你想传递一个包含语句 print("Hello")
的函数,你可以使用:
lambda *args: print("Hello")
这定义了一个函数,它将接受任意数量的位置参数并打印“Hello”。