Stackoverflowには何度もあったので、もう一度書き込む必要があるかどうかわかりません。
Button
は、機能を割り当てるのにcommand=
ですが、引数なしで機能を割り当てることができます。引数が必要な場合は、lambda
を使用する必要があります。私はボタンを参照して関数を割り当てるので、関数は正しいボタンを使用してそれを変更することができます。
lambda
for-loop
におけるニーズarg=btn
とselect_button(arg)
直接select_button(btn)
は、すべての機能で最後のボタンを使用しますので。
以前のボタンを元の色に変更すると、変数を使用して以前にクリックされたボタンを覚えてから、簡単に色を変更することができます。
問題は、クリックした新しいボタンからコピーするようにボタンの輪郭の色を見つけることができます。
import tkinter as tk
# --- functions ---
def select_button(widget):
global previously_clicked
if previously_clicked:
previously_clicked['bg'] = widget['bg']
previously_clicked['activebackground'] = widget['activebackground']
previously_clicked['relief'] = widget['relief']
widget['bg'] = 'green'
widget['activebackground'] = 'green'
widget['relief'] = 'sunken'
previously_clicked = widget
# --- main ---
names = ['Button A', 'Button B', 'Button C']
root = tk.Tk()
previously_clicked = None
for i, name in enumerate(names, 2):
btn = tk.Button(root, text=name)
btn.config(command=lambda arg=btn:select_button(arg))
#btn['command'] = lambda arg=btn:select_button(arg)
btn.grid(row=i, column=0, sticky='w')
root.mainloop()
EDIT:あなたも同じことを行うためにいくつかのオプションでRadiobutton
を使用することができます - と機能なし:
参照:http://effbot.org/tkinterbook/radiobutton.htm
import tkinter as tk
# --- functions ---
def select_button():
print('value:', v.get()) # selected value
# --- main ---
names = ['Button A', 'Button B', 'Button C']
root = tk.Tk()
v = tk.IntVar() # variable for selected value
for i, name in enumerate(names, 2):
btn = tk.Radiobutton(root, text=name, variable=v, value=i) # assign variable and value
btn['indicatoron'] = 0 # display button instead of radiobutton
btn['selectcolor'] = 'green' # color after selection
btn['command'] = select_button # function without variables
btn.grid(row=i, column=0, sticky='w', ipadx=5, ipady=5)
root.mainloop()
私が知っているデフォルトの背景そのボタンの色は薄い灰色です。 – Astrodude11
'for-loo'変数の後に' btn'は最後のボタンだけを保持していますので、 'btn.config'を使って最後のボタンだけを変更します。 – furas
この要素は問題とは関係ありませんが、次回は質問を変更しないでください。他の質問やコメントを読んで、何が起こっているのか理解できない可能性があります。元のバージョンの下に問題の説明/修正を追加する方が良い。 – furas