在tkinter'中传递参数;python上的s协议(“WM”u DELETE“u WINDOW”函数)

在tkinter'中传递参数;python上的s协议(“WM”u DELETE“u WINDOW”函数),python,tkinter,Python,Tkinter,我试图创建一个简单的python程序,其中有一个线程处理UI和另一个“背景资料”。我想在用户试图退出我的应用程序时运行一个函数,此时会出现一个对话框选项 当我运行以下代码时,“on_closing()”函数会自动运行。据我所知,我必须只在协议函数中传递函数名,但我需要几个参数 class MainWindow: def __init__(self, master): master.resizable(0, 0) master.protocol("WM_

我试图创建一个简单的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:同时终止另一个线程的最佳方法是什么?

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

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


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

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


谢谢你的回答!这正是我所需要的。
master
iteself不是随时间变化的变量,因此没有理由执行
arg=master
。简单地
master.protocol(“WM\u DELETE\u WINDOW”,lambda:self.on\u closing(master))
在这里可以正常工作。在这一点上,最好只执行
master.protocol(“WM\u DELETE\u WINDOW”,self.On\u closing)
,然后让
On\u closing
方法执行
self.master.destroy()
。谢谢您的回答!这正是我所需要的。
master
iteself不是随时间变化的变量,因此没有理由执行
arg=master
。简单地
master.protocol(“WM\u DELETE\u WINDOW”,lambda:self.on\u closing(master))
在这里可以正常工作。在这方面,最好只执行
master.protocol(“WM\u DELETE\u WINDOW”,self.On\u closing)
,并让
On\u closing
方法执行
self.master.destroy()。