我正在尝试创建一个简单的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:同时终止其他线程的最佳方法是什么?
答案 0 :(得分:2)
您可以使用protocol
将参数传递给lambda
的回调函数。如替换:
master.protocol("WM_DELETE_WINDOW", self.on_closing(master))
使用:
master.protocol("WM_DELETE_WINDOW", lambda arg=master: self.onclosing(arg))