在python上传递tkinter协议(“WM_DELETE_WINDOW”)函数中的参数

时间:2018-03-11 13:23:38

标签: python tkinter

我正在尝试创建一个简单的python程序,其中一个线程处理UI和另一个“背景内容”。我想在用户尝试退出我的应用程序时运行一个函数,出现一个对话框选项。

当我运行以下代码时,函数“on_closing()”会自动运行。据我所知,我只需要在协议函数中传递函数名称,但我需要一些参数。

class MainWindow:

    def __init__(self, master):

        master.resizable(0, 0)
        master.protocol("WM_DELETE_WINDOW", self.on_closing(master))
        do_stuff('...')

    def on_closing(self, master):
        do_stuff('...')
        self.Destroy(master)

def call_window_manager(title):
    do_stuff(title)
    root = Tk()
    mw = MainWindow(root)
    root.mainloop()


def call_tools(title, mainwindow, master):
    do_stuff(title)


if __name__ == '__main__':

    do_stuff('main line')

    p1 = mp.Process(target=call_window_manager, args=('Window Manager Thread',))
    p2 = mp.Process(target=call_tools, args=('Tools Thread',))

    p1.start()
    p2.start()
    p1.join()
    p2.join()

我如何传递参数呢?我是以错误的方式接近这个吗?

Ps:同时终止其他线程的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用protocol将参数传递给lambda的回调函数。如替换:

master.protocol("WM_DELETE_WINDOW", self.on_closing(master))

使用:

master.protocol("WM_DELETE_WINDOW", lambda arg=master: self.onclosing(arg))