为什么这两个使用tkinter创建小部件网格的程序的性能不同?

时间:2019-02-15 14:48:41

标签: python python-3.x tkinter

我一直在用这个片段来生成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()

为什么会这样?在我看来,这些应该是等效的。我是一个初学者,所以我可能缺少一些非常明显的东西。

1 个答案:

答案 0 :(得分:0)

onPress(entries())中的

tk.Button(text='Fetch', command=onPress(entries()))立即调用 onPress,但是command=onPress中的tk.Button(text='Fetch', command=onPress)传递了一个名为onPress的函数作为参数。