import tkinter as tk
from tkinter import ttk
def draw_mine_field(x=5, y=3):
mine_frame = tk.Toplevel(root)
mine_frame.grid()
root.withdraw()
for a in range(x):
for b in range(y):
ttk.Button(mine_frame, text='*', width=3 ).grid(column=a, row=b)
root = tk.Tk()
root.title("MS")
startframe = ttk.Frame(root)
ttk.Label(root,text="y").grid(row=1,column=1)
y_entry_box = ttk.Entry(root).grid(row=1,column=2)
ttk.Label(root,text="x").grid(row=1,column=3)
x_entry_box = ttk.Entry(root).grid(row=1,column=4)
ttk.Button(root,text="Start",command=draw_mine_field).grid(row=2,column=1)
ttk.Button(root,text="Quit",command=root.destroy).grid(row=2,column=2)
root.mainloop()
对于这个特定的例子,可能有一种更简单的方法。基本上,我想知道的是在command=draw_mine_field
中传递fucntion引用时,如何在不运行函数的情况下传递(x, y)
?总的来说这是如何工作的?
答案 0 :(得分:2)
使用functool.partials
函数进行关闭。
from functools import partial
#...
btn = ttk.Button(root,text="Start",command=partial(draw_mine_field, 5, 3))
btn.grid(row=2,column=1)
有些人会告诉你使用lambda,但这只适用于文字。除非你确切知道它是如何工作的,否则我会避免使用lambda。部分工作一直在进行。
此外,如果您希望将来避免错误,请不要将布局(包,网格或位置)放在与初始化相同的行上。