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谢谢!