我正在尝试使用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()
答案 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()