Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3——将kwargs与仅args模块一起使用_Python 3.x_Tkinter_Publish Subscribe_Pypubsub - Fatal编程技术网

Python 3.x Python3——将kwargs与仅args模块一起使用

Python 3.x Python3——将kwargs与仅args模块一起使用,python-3.x,tkinter,publish-subscribe,pypubsub,Python 3.x,Tkinter,Publish Subscribe,Pypubsub,我正在tkinter中编写一个gui,并使用发布/订阅模块(pyPubSub)通知程序的不同部分,如果它们被订阅,将会发生什么。所以,我有两个功能需要一起工作。从tkinter,我使用: after_idle(callback, *args) 调用在主循环中发送的消息。如您所见,它只接受*args作为要发送到回调的参数。我发送的回调来自pyPubSub: sendMessage(topic, **kwargs) 因此,我最终得出以下结论: root.after_idle(pub.sendMe

我正在tkinter中编写一个gui,并使用发布/订阅模块(pyPubSub)通知程序的不同部分,如果它们被订阅,将会发生什么。所以,我有两个功能需要一起工作。从tkinter,我使用:

after_idle(callback, *args)
调用在主循环中发送的消息。如您所见,它只接受*args作为要发送到回调的参数。我发送的回调来自pyPubSub:

sendMessage(topic, **kwargs)
因此,我最终得出以下结论:

root.after_idle(pub.sendMessage, ?)

我的问题是,如何使args与kwargs一起工作?我必须在空闲后使用位置参数调用,以便与回调一起发送,但回调只需要关键字参数。

您可以始终使用
lambda
,下面是一个不起任何作用的简短示例

import tkinter as tk

def test(arg1, arg2):
    print(arg1, arg2)

root = tk.Tk()
root.after_idle(lambda: test(arg1=1, arg2=2))
root.mainloop()

您可以始终使用
lambda
,下面是一个不起任何作用的简短示例

import tkinter as tk

def test(arg1, arg2):
    print(arg1, arg2)

root = tk.Tk()
root.after_idle(lambda: test(arg1=1, arg2=2))
root.mainloop()

我想我不知道该怎么解决。例如,我有gui_obj.after_idle(pub.sendmages,*package)作为它的需要,包看起来像这样:[,],例如(有时有多个arg,有时没有,这两种方式都不起作用)。当_idle注册回调后,它调用sendMessage(,),我不知道如何让它按照sendMessage的要求作为sendMessage(,msg=)发送。我一直得到:TypeError:sendMessage()接受2个位置参数,但3个是给定的。不管怎么说,我都知道了。我需要使用lambda作为回调函数,然后正确地调用sendMessage。谢谢“takes 2 positional arguments”异常是由after_idle未正确发送引起的。sendMessage需要2个位置参数(self和topic),然后是kwarg。在idle将主题和可选参数都作为位置发送后,它得到了3个位置(其中1个是self),而它只需要2个位置(技术上只有一个来自我,一个来自它自己),我想我不确定如何修复它。例如,我有gui_obj.after_idle(pub.sendmages,*package)作为它的需要,包看起来像这样:[,],例如(有时有多个arg,有时没有,这两种方式都不起作用)。当_idle注册回调后,它调用sendMessage(,),我不知道如何让它按照sendMessage的要求作为sendMessage(,msg=)发送。我一直得到:TypeError:sendMessage()接受2个位置参数,但3个是给定的。不管怎么说,我都知道了。我需要使用lambda作为回调函数,然后正确地调用sendMessage。谢谢“takes 2 positional arguments”异常是由after_idle未正确发送引起的。sendMessage需要2个位置参数(self和topic),然后是kwarg。在_idle将主题和可选参数都作为位置发送后,它得到了3个位置(其中1个是self),而它只需要2个(技术上只需要我一个,自己一个)