我在谷歌上找不到任何东西,我知道语法是after(delay_ms, callback=None, *args)
,所以在某种程度上已经知道了答案...但无论如何,我想知道是否有可能将* kwargs传入它,以及如何。我的意思是这样的:
frame.after(1000, button1.pack, side='left', fill='y')
例如,在下面的脚本中,我可以重写它,这样我就不必自己定义respawn
函数,只需调用btn.pack
中的after()
方法即可?
import tkinter as tk
def click(*args):
btn.pack_forget()
btn.after(1000, btn_respawn, tk.RIGHT, tk.Y)
def btn_respawn(side, fill):
btn.pack(side=side, fill=fill)
root = tk.Tk()
frame = tk.Frame(root, width=300, height=100, bg='orange')
btn = tk.Button(frame, text="test button", font=("Consolas", 14))
frame.pack_propagate(0)
frame.pack()
btn.pack(side=tk.LEFT, fill=tk.Y)
btn.bind("<Button-1>", click)
root.mainloop()
答案 0 :(得分:1)
您可以使用functools.partial
frame.after(1000, functools.update_wrapper(
functools.partial(btn.pack, side='left', fill='y'), btn.pack))
这实际上为您创建了btn_respawn
功能。
请注意,您必须使用update_wrapper
将元数据(例如__name__
)从原始函数复制到部分。
答案 1 :(得分:0)
您可以使用lambda语句。
frame.after(1000, lambda: button1.pack(side='left', fill='y'))
答案 2 :(得分:0)
您可以将字典作为after()的第三个参数传递,并带有key:value对,其中包含要传递给基础回调函数的关键字参数的名称和值。
DbContext.Database.SetConnectionString("bla bla");