我试图用guizero在Python中设置一个GUI,但是我在将参数传递给我的键按处理程序时遇到了困难。如果函数调用为空,则默认的event_data参数将填充有关该事件的信息。如果我试图传递自己的参数,它将不会自动传递event_data。在计算如何传递自己的参数同时保留默认的event_data变量时,我遇到了困难。是否有人知道如何设置它,以便在保留event_data的同时将自己的参数传递给事件处理程序?
这是guizero的事件文档。它们不会遍历参数传递,但它可能会有所帮助:https://lawsie.github.io/guizero/events/
我尝试过传递默认值或无值或event_data本身,但在填充参数时无法得到任何东西。
这样做是可行的:
def keypress(data):
if data.key == "\u001B":
toggle_fullscreen()
app.when_key_pressed = keypress但是当我试图传递我自己的参数时:
def keypress(data, fullscreen):
if data.key == "\u001B":
toggle_fullscreen(fullscreen)
app.when_key_pressed = keypress(fullscreen)它返回一个错误,因为在所需的两个参数中只提供了一个参数。
更新:
我尝试设置函数以接受这两个参数,但没有传递任何内容:
def keypress(data, fullscreen):
if data.key == "\u001B":
toggle_fullscreen()
app.when_key_pressed = keypress我得到了错误:
------------------------------------------------------------
*** GUIZERO WARNING ***
An event callback function must accept either 0 or 1 arguments.
The current callback has 2 arguments.
------------------------------------------------------------这是否意味着我无法向事件处理程序传递任何参数?
发布于 2022-10-09 01:12:39
您应该能够使用functools.partial(),例如:
import functools
def keypress(data, fullscreen):
if data.key == "\u001B":
toggle_fullscreen()
app.when_key_pressed = functools.partial(keypress, argument)它确实适用于guizero事件处理程序,实际上,最近我不得不使用函数工具做一些类似的事情。
下面是关于函数工具的更多信息:https://www.pythonpool.com/functools-partial/
https://stackoverflow.com/questions/55433874
复制相似问题