首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将参数传递给guizero事件处理程序

如何将参数传递给guizero事件处理程序
EN

Stack Overflow用户
提问于 2019-03-30 17:18:40
回答 1查看 352关注 0票数 1

我试图用guizero在Python中设置一个GUI,但是我在将参数传递给我的键按处理程序时遇到了困难。如果函数调用为空,则默认的event_data参数将填充有关该事件的信息。如果我试图传递自己的参数,它将不会自动传递event_data。在计算如何传递自己的参数同时保留默认的event_data变量时,我遇到了困难。是否有人知道如何设置它,以便在保留event_data的同时将自己的参数传递给事件处理程序?

这是guizero的事件文档。它们不会遍历参数传递,但它可能会有所帮助:https://lawsie.github.io/guizero/events/

我尝试过传递默认值或无值或event_data本身,但在填充参数时无法得到任何东西。

这样做是可行的:

代码语言:javascript
复制
def keypress(data):
  if data.key == "\u001B":
    toggle_fullscreen()

app.when_key_pressed = keypress

但是当我试图传递我自己的参数时:

代码语言:javascript
复制
def keypress(data, fullscreen):
  if data.key == "\u001B":
    toggle_fullscreen(fullscreen)

app.when_key_pressed = keypress(fullscreen)

它返回一个错误,因为在所需的两个参数中只提供了一个参数。

更新:

我尝试设置函数以接受这两个参数,但没有传递任何内容:

代码语言:javascript
复制
def keypress(data, fullscreen):
  if data.key == "\u001B":
    toggle_fullscreen()

app.when_key_pressed = keypress

我得到了错误:

代码语言:javascript
复制
------------------------------------------------------------
*** GUIZERO WARNING ***
An event callback function must accept either 0 or 1 arguments.
The current callback has 2 arguments.
------------------------------------------------------------

这是否意味着我无法向事件处理程序传递任何参数?

EN

回答 1

Stack Overflow用户

发布于 2022-10-09 01:12:39

您应该能够使用functools.partial(),例如:

代码语言:javascript
复制
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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55433874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档