我一直在用这个片段来生成tkinter Entry小部件的网格。当我这样编写代码时,它可以按预期工作:
import tkinter as tk
rows = []
for i in range(5):
cols = []
for j in range(4):
e = tk.Entry()
e.grid(row=i, column=j, sticky="nsew")
e.insert("end", '%d.%d' % (i, j))
cols.append(e)
rows.append(cols)
def onPress():
for row in rows:
for col in row:
print (col.get())
tk.Button(text='Fetch', command=onPress).grid()
tk.mainloop()
但是如果这样,它将在按下按钮之前运行命令“ onPress”:
import tkinter as tk
def entries():
rows = []
for i in range(5):
cols = []
for j in range(4):
e = tk.Entry()
e.grid(row=i, column=j, sticky="nsew")
e.insert("end", '%d.%d' % (i, j))
cols.append(e)
rows.append(cols)
return rows
def onPress(rows):
for row in rows:
for col in row:
print (col.get())
entries()
tk.Button(text='Fetch', command=onPress(entries())).grid()
tk.mainloop()
为什么会这样?在我看来,这些应该是等效的。我是一个初学者,所以我可能缺少一些非常明显的东西。
答案 0 :(得分:0)
onPress(entries())
中的 tk.Button(text='Fetch', command=onPress(entries()))
立即调用 onPress
,但是command=onPress
中的tk.Button(text='Fetch', command=onPress)
传递了一个名为onPress
的函数作为参数。