Tkinter无法使用Command更改对象(按钮)的颜色我想念的是什么?

时间:2019-05-04 14:55:44

标签: python python-3.x tkinter

我正在尝试使用for循环使按钮运行命令来更改按钮颜色。

这有效,但只更改一个按钮。

token

这不起作用。首先,让我在创建按钮之前更改颜色。还给我一个错误。

from tkinter import*
from tkinter.colorchooser import *
top=Tk()
buttonlist=[]
button_counter=0
def change_color():
    #change button color
    color=askcolor()
    color=color[1]
   buttonlist[0].configure(bg=color)

how_many_times=range(2)
y=25

for num in how_many_times:
   buttonlist.append(Button(width=5, 
  relief=SUNKEN, bg="Black", 
  command=change_color))
    buttonlist[button_counter].place(x=10, y=y)
    y=y+100
    button_counter=button_counter+1 
top.mainloop()

错误:

from tkinter import*
from tkinter.colorchooser import *
top=Tk()
buttonlist=[]
button_counter=0

def change_color(button_number):
        #change button color
    color=askcolor()
    color=color[1]
    buttonlist[button_number].configure(bg=color)




how_many_times=range(2)
y=25
for num in how_many_times:
    buttonlist.append(Button(width=5, 
        relief=SUNKEN, bg="Black", command=change_color(button_counter)))
    buttonlist[button_counter].place(x=10, y=y)
    y=y+100
    button_counter=button_counter+1
top.mainloop()

1 个答案:

答案 0 :(得分:0)

command=期望callback-表示没有()的函数名称

您必须使用lambda为参数分配功能。但是lambda循环内的for也需要n=num才能在函数中使用正确的值。否则,它将在所有按钮中使用for循环中的最后一个值。而且该值可能大于列表中的项目数-并可能导致错误list index out of range

import tkinter as tk
import tkinter.colorchooser as tkcolorchooser

# --- functions ---

def change_color(button_number):
    #change button color
    color = tkcolorchooser.askcolor()
    color = color[1]
    buttonlist[button_number].configure(bg=color)

# --- main ---

buttonlist = []
y = 25

top = tk.Tk()

for num in range(2):
    b = tk.Button(width=5, relief="sunken", bg="Black",
               command=lambda n=num:change_color(n))
    b.place(x=10, y=y)
    buttonlist.append(b)
    y += 100

top.mainloop()