我正在尝试创建一个按钮网格,当按下一个按钮时,它会将颜色更改为黄色,并将文本更改为1,如果再次单击该按钮,它将更改回来。我做了以下代码
import tkinter
from tkinter.constants import *
window = Tk()
window.title ("Button")
c = Canvas(window, height = 300, width = 300)
c.pack()
def change_colour():
if button1.cget('bg') == '#FFFF00':
button1.configure(bg = '#FF0000')
button1.configure(text = '0')
elif button1.cget('bg') == '#FF0000':
button1.configure(bg = '#FFFF00')
button1.configure(text = '1')
button1 = Button(c,text="0",bg = '#FF0000', command = change_colour)
button1.grid(row=1,column=0)
button2 = Button(c, text="0",bg = '#FF0000')
button2.grid(row=1,column=2)
button3=Button(c,text="0",bg = '#FF0000')
button3.grid(row=0,column=1)
button4=Button(c,text="0",bg = '#FF0000')
button4.grid(row=2,column=1)
button5=Button(c,text="0",bg = '#FF0000')
button5.grid(row=0,column=0)
button6=Button(c,text="0",bg = '#FF0000')
button6.grid(row=0,column=2)
button7=Button(c,text="0",bg = '#FF0000')
button7.grid(row=1,column=1)
button8=Button(c,text="0",bg = '#FF0000')
button8.grid(row=2,column=0)
button9=Button(c,text="0",bg = '#FF0000')
button9.grid(row=2,column=2)
button10=Button(c,text="0",bg = '#FF0000')
button10.grid(row=0,column=3)
button11=Button(c,text="0",bg = '#FF0000')
button11.grid(row=1,column=3)
button12=Button(c,text="0",bg = '#FF0000')
button12.grid(row=2,column=3)
而且我想将命令添加到所有按钮,但是我不能,因为该功能特定于按钮1,所以我认为我可以这样做:
def change_colour(button):
if button.cget('bg') == '#FFFF00':
button.configure(bg = '#FF0000')
button.configure(text = '0')
elif button.cget('bg') == '#FF0000':
button.configure(bg = '#FFFF00')
button.configure(text = '1')
但是python阻止我在此行中将参数传递给命令:
button1 = Button(c,text="0",bg = '#FF0000', command = change_colour)
但是它不起作用。有人可以找出如何将参数传递给命令或找到其他方法吗?
这是我解决该问题的方法。希望对您有所帮助。
from tkinter import *
master = Tk()
master.title("Buttons")
master.wm_resizable(0, 0)
master.configure(background = 'black')
clicker = []
toggle = [0, 0, 0, 0, 0, 0, 0, 0]
original_bg = ""
orig_active = ""
def click(number):
toggle[number] = 1 - toggle[number]
if toggle[number] == 1:
clicker[number].configure(bg = "red")
clicker[number].config(activebackground = "#ff5555")
else:
clicker[number].configure(bg = original_bg)
clicker[number].configure(activebackground = orig_active)
for x in range(8):
num = str(x)
clicker.append(Button(master, bd = 4, width = 6,
text = "Button " + num, command = lambda x=x: click(x)))
clicker[x].grid(padx = (15, 15), pady = (10, 0))
clicker[7]. grid(pady = (10, 15))
original_bg = clicker[0].cget("bg")
orig_active = clicker[0].cget("activebackground")
mainloop()
为了在tkinter按钮中传递参数或调用函数,必须为此目的使用lambda
。只需要将您的Button代码更改为:
button1 = Button(c,text="0",bg = '#FF0000', command = lambda: change_colour(...))
对于您的问题的第一部分,您可能需要关注@bashBedlam答案但是,这将允许您将参数传递给按钮:)