Python调度程序作为tkinter Button命令/ eventlistener

时间:2014-04-18 20:10:45

标签: python tkinter dispatcher sender

在我的View类中,我想使用pydispatcher.dispatcher的send方法 一个tkinter Button命令,用于在MVC设计中向我的Controller类发送信号 已按下按钮。我这样做:

self.calc_button = tkinter.Button(self.bottom_frame,text='Convert', \
        command=dispatcher.send(signal = 'valueToConvert', sender=dispatcher.Any, message='Kilo'))

奇怪的是(对我而言)是dispatcher.send被“激活”了 创建按钮时。为什么?此外,dispatcher.send永远不会 按下按钮时“激活”。为什么呢?

在控制器类中,这是“监听器”构造:

class Controller():

    def __init__(self):
        dispatcher.connect(self.myListener, 
                        signal='valueToConvert',
                        sender=dispatcher.Any)
        self.model = Model()
        self.view = View()
    def myListener(self, message, arg2=None):
        print("Received the following message: " + message)

1 个答案:

答案 0 :(得分:1)

我对调度员一无所知,但这是一个常见问题:您将函数调用的结果分配给command,因为您没有将其包含在一个lambda。尝试:

self.calc_button = tkinter.Button(self.bottom_frame,text='Convert', \
    command=lambda *args: dispatcher.send(signal = 'valueToConvert', sender=dispatcher.Any, message='Kilo'))