当前位置:  开发笔记 > 编程语言 > 正文

打印单击按钮的文本tkinter

如何解决《打印单击按钮的文本tkinter》经验,为你挑选了1个好方法。

这是我的代码:

from tkinter import *    

def command(d):
   print(d)

a = Tk()
b = []

for c in range(0, 5):
    b.append(Button(a, text=c, command=lambda: command(c)))
    b[c].pack()

a.mainloop()

运行脚本时,按钮全部打印4,而我希望它们打印显示在它们上面的数字.你怎么能这样做?

我使用的是Python 3.4



1> wpercy..:

乍一看,这里有一些错误.首先,你的for循环需要缩进四个空格,如下所示:

for c in range(0, 5):
    b.append(Button(a, text=c, command=lambda: command(c))
    b[c].pack()

如果你不这样做,那么c脚本的其余部分的值将是4,因为这是c最后一次迭代的值range(0, 5).

按钮始终打印4的原因是因为c在调用回调时评估变量,而不是在将回调分配给按钮时.避免这个问题的一个简单方法是c使用虚拟变量(我们称之为j)的当前值初始化lambda函数,如下所示:lambda j=c: command(j).把它放在一起,你应该有这样的东西:

from tkinter import *    

def command(d):
   print(d)

a = Tk()
b = []

for c in range(0, 5):
    x = Button(a, text=c, command=lambda j=c: command(j))
    x.pack()
    b.append(x)

a.mainloop()

我改变了打包按钮的方式,因为我觉得它更具可读性,但最终结果应该是一样的.


`x = Button().pack()`将`None`分配给`x`,因为`pack()`返回`None`.你需要`x = Button(); x.pack()`
推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有