在tkinter'中传递参数;python上的s协议(“WM”u DELETE“u WINDOW”函数)
我试图创建一个简单的python程序,其中有一个线程处理UI和另一个“背景资料”。我想在用户试图退出我的应用程序时运行一个函数,此时会出现一个对话框选项 当我运行以下代码时,“on_closing()”函数会自动运行。据我所知,我必须只在协议函数中传递函数名,但我需要几个参数在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_
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()。