2016-08-02 62 views
0

我在tkinter中編寫了一個gui,並使用發佈/訂閱模塊(pyPubSub)來通知程序的不同部分發生了什麼,如果他們訂閱了。所以,我有兩個功能,我需要一起工作。從tkinter,我正在使用:Python 3 - 使用kwargs和args only模塊

after_idle(callback, *args) 

調用主循環內的消息發送。正如你所看到的,它只接受* args作爲發送給回調的參數。我送的回調是從pyPubSub:

sendMessage(topic, **kwargs) 

所以,我結束了這一點:

root.after_idle(pub.sendMessage, ?) 

我的問題是,如何使ARGS與kwargs工作?我必須調用具有位置參數的after_idle以使用回調進行發送,但回調只需要關鍵字參數。

回答

3

您可以隨時使用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() 
+0

我想我不確定那將如何解決它。例如,我有gui_obj.after_idle(pub.sendMessage,*包),因爲它需要和包看起來像這樣:[,],例如(有時有多個參數,有時不會,它不起作用無論哪種方式)。當after_idle註冊回調函數時,它會調用sendMessage(,),我無法弄清楚如何根據sendMessage的要求將它作爲sendMessage發送(,msg = )。我不斷得到:TypeError:sendMessage()需要2個位置參數,但有3個被給出 – linus72982

+0

沒關係,我想通了。我需要使用lambda作爲回調函數,然後將正確調用sendMessage。謝謝! – linus72982

+0

「需要2個位置參數」異常是由after_idle沒有正確發送引起的。 sendMessage想要2位置參數(自我和主題),然後是kwargs。 after_idle發送主題和可選參數都作爲位置,所以當它只需要2(從我自己和1自己的技術上只有一個)時,得到3個定位(其中1個是自己) – linus72982

相關問題