使用tkinter制作按钮数组之后,这些按钮将无法单击,几乎就像我为每个按钮分配的唯一命令没有遵守每个按钮一样
我尝试使用lambda方法和局部方法,但似乎都不起作用
import tkinter as tk
from functools import partial
#Sets root as Tk
root = Tk()
#Makes our GUI space
canvas = Canvas(root, width = 1600, height = 1100, bg = "white")
class App:
def clicked(self, i):
print("Clicked")
print(self.button[i])
def __init__(self, root):
self.root = root
self.button = [];
#Allows button size to be set in pixels
pixel = tk.PhotoImage(width=1, height=1, master = root)
for i in range(5):
#Makes each button and adds it to self.button array
self.button.append(tk.Button(root, bg = "red", image=pixel,
width = 10, height = 10,
command=lambda: clicked(i)))
#I have also tried:
#command=partial(clicked, i)
#command=lambda i=i: clicked(i)
#Places button on canvas
self.button[i].place(x=10*i, y=10*i, in_=canvas)
canvas.pack()
App(root)
root.mainloop()
我希望能够单击每个按钮,并在Jupyter终端行中看到单词“ Clicked”。但是我什么也没得到...
答案 0 :(得分:0)
首先,当您调用clicked()
时,解释器不希望它位于类中。
相反,您应该致电self.clicked()
。当我这样做时,它几乎可以正常工作;我在python shell中得到了文本:“ Clicked。!Button5”。
唯一的问题是每个按钮都是按钮5,我认为这与循环中的按钮编号有关。声明第一个按钮后,i = 1
,i
会像for循环中的可迭代对象一样更改值。