Python-如何';设置';争论?

Python-如何';设置';争论?,python,python-3.x,tkinter,menubar,Python,Python 3.x,Tkinter,Menubar,我正在努力解决这个问题,有人能帮我吗? 这就是我所说的“设置”参数的意思: from tkinter import * window = Tk() I=1 def add(): global I menu1.add_command(label=I, command=lambda:Text(I)) I=I+1 def Text(I): print(I) menubar = Menu(window) menu1 = Menu(menubar, tearoff=0

我正在努力解决这个问题,有人能帮我吗? 这就是我所说的“设置”参数的意思:

from tkinter import *

window = Tk()
I=1
def add():
    global I
    menu1.add_command(label=I, command=lambda:Text(I))
    I=I+1

def Text(I):
    print(I)
menubar = Menu(window)

menu1 = Menu(menubar, tearoff=0)
menu1.add_command(label="Add", command=add)
menu1.add_separator()
menu1.add_command(label="Quit", command=window.quit)
menubar.add_cascade(label="Files", menu=menu1)

window.config(menu=menubar)

window.mainloop()
我想当我们点击add时,在点击'1'后,它会打印'1',当我们点击'2'时,它会打印'2',但它总是打印I的值,我如何设置参数

menu1.add_command(label=I, command=lambda:Text(1))
例如?
我不知道我是否清楚,但我不知道如何解释它

我认为您的问题在于
lambda:Text(I)
。在本例中,您已经创建了一个闭包,但是闭包知道我是一个全局闭包,并在稍后对其进行评估

您可能希望立即评估
Text(I)
,并将其用作结果:

texti = Text(I)   # Immediate evaluation
menu1.add_command(label=I, command=lambda:texti)  # Return prior value of "I"

我认为您的问题在于
lambda:Text(I)
。在本例中,您已经创建了一个闭包,但是闭包知道我是一个全局闭包,并在稍后对其进行评估

您可能希望立即评估
Text(I)
,并将其用作结果:

texti = Text(I)   # Immediate evaluation
menu1.add_command(label=I, command=lambda:texti)  # Return prior value of "I"

文本
函数更改为:

然后将
add
函数更改为:

def add():
    global I
    text = Text(I)
    menu1.add_command(label=I, command=text)
    I=I+1
这将把
I
保存在
text
变量中。
text
变量实际上是一个函数,
internal
,调用时将打印
I

或者,如果您想在其他地方使用
Text
函数,可以将闭包内联:

import functools
...    
menu1.add_command(label=I, command=functools.partial(Text, i))

文本
函数更改为:

然后将
add
函数更改为:

def add():
    global I
    text = Text(I)
    menu1.add_command(label=I, command=text)
    I=I+1
这将把
I
保存在
text
变量中。
text
变量实际上是一个函数,
internal
,调用时将打印
I

或者,如果您想在其他地方使用
Text
函数,可以将闭包内联:

import functools
...    
menu1.add_command(label=I, command=functools.partial(Text, i))

你能试着举一个更简单的例子吗?对我来说,这个问题并不清楚。所以,你想让菜单上的每个按钮都记住
I
在创建时的值是多少?没错,谢谢你,我不知道如何表述它!你能试着举一个更简单的例子吗?对我来说,这个问题并不清楚。所以,你想让菜单上的每个按钮都记住
I
在创建时的值是多少?没错,谢谢你,我不知道如何表述它!这是行不通的;它会立即打印,而不是当他们点击它时;它会立即打印,而不是在他们单击它时打印。您可以使用
functools.partial
动态关闭;在本例中:
menu1.add_命令(label=I,command=partial(Text,I))
@Jonathan谢谢!您可以使用
functools.partial
动态关闭;在本例中:
menu1.add_命令(label=I,command=partial(Text,I))
@Jonathan谢谢!