Seite 1 von 1

Farbwähler bei tkinter ...

Verfasst: Dienstag 29. Juni 2021, 19:41
von Grexie
Hi,

laut Fachbuch soll folgender Mini-Code einen Farbwähler, d.h. die Farbpalette von "tkinter" zeigen, funktioniert bei mir aber nicht. :roll: Es kommt dann die Fehlermeldung: "NameError: name 'colorchooser' is not defined". :cry: Habe die aktuelle Version 3.9 von Python.

Code: Alles auswählen

from tkinter import *
t = Tk()
colorchooser.askcolor()
Kann mir jemand sagen, was da falsch ist bzw. wie man den Farbwähler richtig codiert.

Gruß ... Grexie :D

Re: Farbwähler bei tkinter ...

Verfasst: Dienstag 29. Juni 2021, 20:35
von moe
Hi,

ich würde das so codieren:

Code: Alles auswählen

from tkinter.colorchooser import askcolor
askcolor()

Re: Farbwähler bei tkinter ...

Verfasst: Mittwoch 30. Juni 2021, 20:46
von Grexie
Hi Moe, besten Dank für deinen Vorschlag. Ich hab's ausprobiert und es klappte. Der Farbwähler wird angezeigt.Jetzt würde mich noch interessieren, wie ich an die RGB-Werte komme. Das müssten ja drei Werte jeweils zwischen 0 und 255 sein - für rot, grün und blau. LG ... Grexie :D

Re: Farbwähler bei tkinter ...

Verfasst: Mittwoch 30. Juni 2021, 21:07
von __blackjack__
Die Funktion hat einen Rückgabewert. Schau Dir den mal an.

Edit: Auch daran denken, dass der Benutzer per Schaltfläche abbrechen oder das Fenster schliessen kann.

Re: Farbwähler bei tkinter ...

Verfasst: Mittwoch 30. Juni 2021, 21:24
von moe
Wie __blackjack__ schon erwähnt hat, hat die Funktion askcolor() einen Rückgabewert. Genauer gesagt gibt es ein Tupel zurück, welches die rgb-Werte und zusätzlich noch den hexadezimalen Wert der Farbe beinhaltet. Du musst nur den Rückgabewert in eine Variable speichern. Ungefähr so:

Code: Alles auswählen

from tkinter.colorchooser import *
color = askcolor()
print(color[0])
Mit print werden dann die rgb-Werte ausgegeben. Die Null in eckigen Klammern hinter der Variablen color sorgt dafür, dass nur die rgb-Werte angezeigt werden.

Re: Farbwähler bei tkinter ...

Verfasst: Mittwoch 30. Juni 2021, 22:07
von __blackjack__
Warum ist denn aus dem ``askcolor`` jetzt ein ``*`` geworden?

Re: Farbwähler bei tkinter ...

Verfasst: Mittwoch 30. Juni 2021, 22:12
von moe
Hoppla, hast recht hab mich verschrieben! :wink:

Re: Farbwähler bei tkinter ...

Verfasst: Mittwoch 30. Juni 2021, 22:17
von moe
Noch ein kleiner Nachtrag: Seltsamer Weise werden die rgb-Werte als Gleitkommazahlen mit Nachkommastellen ausgegeben. Ich habe mal kurz recherchiert. Dies ist ein Bug in Tkinter, welcher mit Python 3.10 behoben sein wird (https://bugs.python.org/issue33289). Ein kurzer Workaround könnte so aussehen:

Code: Alles auswählen

from tkinter.colorchooser import askcolor
color = askcolor()
rgb = [int(rgb_value) for rgb_value in color[0]]
print(rgb)
Damit wird eine Liste mit Ganzzahlen der rgb-Werte erstellt.

Re: Farbwähler bei tkinter ...

Verfasst: Donnerstag 1. Juli 2021, 19:14
von Grexie
moe hat geschrieben: Mittwoch 30. Juni 2021, 22:17 Noch ein kleiner Nachtrag: seltsamerweise werden die rgb-Werte als Gleitkommazahlen mit Nachkommastellen ausgegeben. Ich habe mal kurz recherchiert. Dies ist ein Bug in Tkinter, welcher mit Python 3.10 behoben sein wird (https://bugs.python.org/issue33289). Ein kurzer Workaround könnte so aussehen:

Code: Alles auswählen

from tkinter.colorchooser import askcolor
color = askcolor()
rgb = [int(rgb_value) for rgb_value in color[0]]
print(rgb)
Damit wird eine Liste mit Ganzzahlen der rgb-Werte erstellt.

Hi, ja - das funktioniert. Danke! Statt der For-Schleife in der rgb-Zuweisung könnte man es ja auch so machen:

Code: Alles auswählen

from tkinter.colorchooser import askcolor
color = askcolor()

#alle 4 gespeicherten RGB-Werte
print("Die gespeicherten RGB-Werte: ", color)

#die 3 gespeicherten RGB-Werte als "float"
rgb = color[0]
print("3 RGB-Werte: ", rgb)

#die RGB-Werte als Hexadezimalzahl
rgb_hex = color[1]
print("RGB als Hex: ", rgb_hex)

#die einzelnen RGB-Kanäle als "integer"
rgb1 = int(rgb[0])
print("1. RGB-Wert: ", rgb1)

rgb2 = int(rgb[1])
print("2. RGB-Wert: ", rgb2)

rgb3 = int(rgb[2])
print("3. RGB-Wert: ", rgb3)

Re: Farbwähler bei tkinter ...

Verfasst: Donnerstag 1. Juli 2021, 19:51
von moe
Hi Grexie,

ja kann man so machen. Mit deiner Lösung braucht man aber mehr Zeilen Code. Generell versucht man aber in der Programmierung den Code so kompakt wie möglich und verständlich zu halten.

Re: Farbwähler bei tkinter ...

Verfasst: Freitag 2. Juli 2021, 05:50
von Grexie
Hi Moe, das stimmt. Dein Code ist natürlich kompakter. Zum Verständnis der Zusammenhänge kann man den Code mal aufdröseln, danach kommt dann deine elegantere Lösung mit weniger Quelltext. Das ist bei Python schon erstaunlich, wie knapp der Code u.U.ausfallen kann. :)

Re: Farbwähler bei tkinter ...

Verfasst: Samstag 17. Juli 2021, 03:52
von harryberlin
nur mal noch so am rande: rgb = rot, grün, blau.
da brauchts kein 1,2,3 ;)