tkinter在for循环中创建按钮,传递命令参数-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

tkinter在for循环中创建按钮,传递命令参数

2019-12-27 10:09:54 255 1

我试图在tkinter的for循环内创建按钮。在每个循环中,将i count值作为命令值中的一个参数传递出去。因此,当从命令值调用该函数时,我可以知道按下了哪个按钮并相应地进行操作。问题是,假设len是3,它将创建3个标题为“Game 1”到“Game 3”的按钮,但当任何一个按钮被按下时,打印的值总是2,即最后一次迭代。因此,看起来按钮是作为单独的实体创建的,但是命令参数中的i值似乎都是一样的。代码如下:

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),command=lambda:self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)
def open_this(self, myNum):
    print(myNum)

在每次迭代时,是否有一种方法可以让当前的i值与那个特定的按钮保持一致? 问题来源StackOverflow 地址:/questions/59383753/python-tkinter-button-widget-behavior

取消 提交回答
全部回答(1)
  • kun坤
    2019-12-27 10:10:00

    改变你的lambda为i=i: self.open_this(i)。 这可能看起来很神奇,但实际情况是这样的。当您使用那个lambda来定义函数时,open_this调用在您定义函数时不会得到变量i的值。相反,它做了一个闭包,这有点像一个对自己的注释,说“我应该查找变量I在被调用时的值”。当然,函数是在循环结束后调用的,所以在那个时候i总是等于循环的最后一个值。 使用i=i技巧将使函数在定义lambda时存储i的当前值,而不是等待以后查找i的值。

    0 0
相关问答

1

回答

Python开发工具中的Tkinter和PyGTK指的是什么呀?

2022-04-02 13:11:56 265浏览量 回答数 1

1

回答

Jupyter中R语言中的sum(x,y,z,na.rm=FALSE)函数的作用是什么?

2021-12-01 19:43:54 182浏览量 回答数 1

1

回答

java中int indexOf(String str, int fromIndex)是什么意思?

2021-11-15 13:43:29 127浏览量 回答数 1

1

回答

Java I/O流中的OutputStream类voidwrite(int n)方法的作用是什么?

2021-10-30 16:04:27 122浏览量 回答数 1

1

回答

求有经验的Java大牛看看,Tomcat 中System.out.println()造成死锁?报错

2020-06-08 15:18:50 684浏览量 回答数 1

0

回答

如何在Tkinter中获取按钮的文本

2019-12-23 21:51:20 1038浏览量 回答数 0

1

回答

【Flink】报错 Incorrect String value:'\xF0\x9F...'for column

2018-11-15 13:20:08 2359浏览量 回答数 1

1

回答

M3云主机zsr3v1,网页默认为index.html,浏览器不能访问

2018-09-30 16:15:04 396浏览量 回答数 1

0

回答

Sparkling Water 2.0: The next generation of machine learning on Apache Spark

2018-07-29 00:40:00 839浏览量 回答数 0

1

回答

阿里云 - 云虚拟主机1G空间 支持asp.net状态服务吗?

2017-04-19 10:26:45 2171浏览量 回答数 1
+关注
0
文章
13395
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载