Button Farbe ändern wenn Button geklickt wurde

Fragen zu Tkinter.
Antworten
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Liebe Community,
:shock: Ich brauche etwas start Hilfe.
Wie kann ich die Farbe eines Butons ändern wenn dieser angeklickt wurde. :shock:
:K Besser gesagt. Ich habe dem Button eine Funktion als command (lamda) gegeben.
Wird dieses aufgerufen erscheint der aus TKinter bekante FarbAuswahlDialog
Wird nun hier eine neue Farbe ausgewählt, dann soll auch der Hintergrund des Buttons
diese Farbe zu erhalten, um so zu sehen welche Farbe gewählt wurde. :K
Ein vorschlag wie man das erreichen könnte möglichst mit Beispiel wäre echt tool
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Hallo,

schau dir mal die allgemeinen Widget-Methoden w.config bzw w.configure an. Außerdem gibt es noch das Statement w[option] = value

Falls du ttk verwendest, musst du beachten, dass hier "themes" und "styles" verwendet werden.

mfg
BlackJack

Man könnte sich einen abgeleiteten `Button` dafür schreiben:

Code: Alles auswählen

from __future__ import absolute_import, division, print_function

import Tkinter as tk
from colorsys import rgb_to_hls, hls_to_rgb
from tkColorChooser import askcolor


class ColorButton(tk.Button, object):

    def __init__(self, master, color=None, **kwargs):
        tk.Button.__init__(self, master, **kwargs)
        self._color = None
        self._command = kwargs.get('command', lambda: None)
        self['command'] = self.choose_color
        self.color = color

    @property
    def color(self):
        return self._color

    @color.setter
    def color(self, color):
        self._color = color
        red, green, blue = (c / 65535.0 for c in self.winfo_rgb(color))
        hue, lightness, saturation = rgb_to_hls(red, green, blue)
        red, green, blue = (
            int(c * 255)
            for c in hls_to_rgb(hue, min(1.0, lightness + 0.2), saturation)
        )
        foreground = 'white' if lightness < 0.5 else 'black'
        self.configure(
            background=color,
            activebackground='#{0:02x}{1:02x}{2:02x}'.format(red, green, blue),
            foreground=foreground,
            activeforeground=foreground
        )

    def choose_color(self):
        _, color = askcolor(self.color)
        if color is not None:
            self.color = color
            self._command(self.color)


def main():
    root = tk.Tk()
    color_button = ColorButton(root, 'red', text='Choose color', command=print)
    color_button.pack()
    root.mainloop()


if __name__ == '__main__':
    main()
Antworten