如何将参数传递给按钮中的命令[重复]

问题描述 投票:0回答:2

我正在尝试创建一个按钮网格,当按下一个按钮时,它会将颜色更改为黄色,并将文本更改为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)

但是它不起作用。有人可以找出如何将参数传递给命令或找到其他方法吗?

python-3.x button tkinter
2个回答
0
投票

这是我解决该问题的方法。希望对您有所帮助。

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()

0
投票

为了在tkinter按钮中传递参数或调用函数,必须为此目的使用lambda。只需要将您的Button代码更改为:

button1 = Button(c,text="0",bg = '#FF0000', command = lambda: change_colour(...))

对于您的问题的第一部分,您可能需要关注@bashBedlam答案但是,这将允许您将参数传递给按钮:)

© www.soinside.com 2019 - 2024. All rights reserved.