2016-08-02 10 views
0

私はtkinterにguiを書いており、パブリッシュ/サブスクライブモジュール(pyPubSub)を使って、プログラムが購読している場合に何が起こっているかを知らせます。だから私は一緒に働く必要がある2つの機能があります。 tkinterから、私は使用しています:Python 3 - argsのみのモジュールでkwargsを使う

after_idle(callback, *args) 

メインループ内のメッセージ送信を呼び出します。ご覧のように、コールバックに送る引数は* argsだけを受け入れます。私が送信していたコールバックはpyPubSubからである:、

root.after_idle(pub.sendMessage, ?) 

私の質問はどのように私は、引数がkwargsからで動作させるか:

sendMessage(topic, **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、* package)を必要とし、パッケージは次のようになります。[](例えば、複数の引数があることもあります。どちらにしても)。 after_idleがコールバックを登録すると、sendMessage()が呼び出され、sendMessageが必要とするsendMessage(、msg = )として送信する方法を知ることができません。私は続けている:TypeError:sendMessage()は2つの位置引数を取るが、3つは与えられた – linus72982

+0

心配しないで、私はそれを理解した。ラムダをコールバック関数として使用してsendMessageを正しく呼び出す必要があります。ありがとう! – linus72982

+0

「2つの位置引数を取る」例外は、正しく送信していないafter_idleによって発生しました。 sendMessageは、2つの位置引数(selfとtopic)を求めてから、kwargsを求めました。 after_idleはトピックと引数を両方とも位置情報として送信していたので、2つしか必要でないときは3つの位置情報(1つは自己)を取得していました(技術的には1つで、 – linus72982

関連する問題