Es war so viele Male auf Stackoverflow, also weiß ich nicht, ob ich es noch einmal schreiben sollte.
Button
hat command=
, um Funktion zuzuweisen, aber es kann Funktion ohne Argumente zuweisen. Wenn Sie mit Argumenten benötigen, müssen Sie lambda
verwenden. Ich weise Funktion mit Bezug auf Knopf zu, so kann Funktion korrekten Knopf verwenden und es ändern.
lambda
in for-loop
Bedürfnissen arg=btn
und select_button(arg)
weil direkte select_button(btn)
letzte Taste in allen Funktionen nutzen werden.
Wie bei vorherigen Schaltfläche Originalfarbe ändern Sie Variable verwenden können previusly geklickt Taste merken und dann können Sie diese leicht Farbe ändern.
Problem kann sein, oryginal Farbe des Knopfes zu finden, also kopiere ich es von neuem geklicktem Knopf.
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: Sie auch Radiobutton
mit einigen Optionen verwenden können, das gleiche zu tun - und ohne Funktion:
siehe: 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()
Ich weiß, dass der Standard-Hintergrund Die Farbe eines Knopfes ist hellgrau. – Astrodude11
nach 'for-loo' Variable' btn' behält nur die letzte Taste, also benutzt 'btn.config' nur die letzte Taste. – furas
diese Elemente haben nichts mit dem Problem zu tun, aber nächstes Mal nicht Frage ändern, weil andere lesen, Frage und Kommentar und sie verstehen möglicherweise nicht, was vor sich geht. Bessere Erklärungen/Modifikationen unter der Originalversion. – furas