|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面是代码:
--------------------------------------------------------------------------------------------------------------------------
import tkinter as tk
root = tk.Tk()
root.geometry('1050x600')
a = [(i+1, (i+1)*10) for i in range(70)]
print(a)
def fun(x):
print(x)
for i in range(7):
for j in range(10):
btn = tk.Button(root, width=12, height=3,
text=a[i*10+j][0],
command=lambda: fun(a[i*10+j][1])).grid(row=i, column=j, padx=5, pady=7)
root.mainloop()
---------------------------------------------------------------------------------------------------------------------------
这个代码生成了7行10列的70个按钮, 按钮的名字依次是a列表中各元组的第一个值, 题目要求是每按一个按钮会打印出对应元组的第二个值,
比如按1打印10, 按5打印50, 按49打印490, 按70打印700
可是代码无论按哪个按钮都是打印的最后一个值700, 事件函数不知道应该怎么写才能达到题目要求, 请各位大神帮帮忙
本帖最后由 isdkz 于 2022-6-19 23:17 编辑
因为 lambda: fun(a[i*10+j][1]) 是函数,也就是说没有即时执行的,只有按钮被点击的时候才执行,
所以在按钮没有被点击的时候,fun(a[i*10+j][1]) 中 i 和 j 的值并没有固定下来,而循环结束后 i 的 值为 6,j 的值为 9,
所以你不管点击那个按钮都是输出 700
故对你的代码修改如下:import tkinter as tk
root = tk.Tk()
root.geometry('1050x600')
a = [(i+1, (i+1)*10) for i in range(70)]
print(a)
for i in range(7):
for j in range(10):
def fun(x=a[i*10+j][1]):
print(x)
btn = tk.Button(root, width=12, height=3,
text=a[i*10+j][0],
command=fun).grid(row=i, column=j, padx=5, pady=7)
root.mainloop()
|
|