Kann man z.B. bei einen normalen blauen Canvasfenster einen Farbübergang einbauen??? Ich meine so was wie von dunkelblau zu hellblau oder so??!
Hab nur Interesse ob so was mit python überhaupt möglich ist!
gruß meister56
Farbübergang??
Ja.meister56 hat geschrieben:Kann man z.B. bei einen normalen blauen Canvasfenster einen Farbübergang einbauen??? Ich meine so was wie von dunkelblau zu hellblau oder so??!
Hab nur Interesse ob so was mit python überhaupt möglich ist!
Hallo meister56
Hier ein ein Versuchsskript um einen Farbverlauf auf einer Canvas zu erzeugen:
Gruss wuf
Hier ein ein Versuchsskript um einen Farbverlauf auf einer Canvas zu erzeugen:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#~~ Skriptname tk_color_fading_01.py (wuf)
#~~ Versuch: Horizontaler Farbverlauf auf einer Canvas mit Hilfe
# eines PhotoImage-Objektes
import Tkinter as tk
root = tk.Tk()
data = list(xrange(256)) # 0..255
reverse_fading = False
if reverse_fading:
data.reverse()
#~~ Erzeugt ein PhotoImage-Objekt
photo_image = tk.PhotoImage(width=len(data), height=1)
fade_color = 'dark_red'
format = "#%02x%02x%02x"
fade_function = {
'dark_blue' : lambda v: format % (0, 0, v),
'dark_green' : lambda v: format % (0, v, 0),
'dark_red' : lambda v: format % (v, 0, 0),
'brite_blue' : lambda v: format % (v, v, 255),
'brite_green': lambda v: format % (v, 255, v),
'brite_red' : lambda v: format % (255, v, v),
}.get(fade_color, lambda v: format % (0, 255, v))
#~~ Färbt die Fläche des PhotoImage-Objektes ein
photo_image.put((tuple(map(fade_function, data)),))
#~~ Skaliert die Fläche des PhotoImage-Objektes
photo_image = photo_image.zoom(4, 300)
#~~ Ermittelt die Breite & Höhe des PhotoImages-Objektes
image_width = photo_image.width()
image_height = photo_image.height()
#~~ Canvas für die Aufnahme des Photo-Images (Geometrie ist abhängig von der
# Breite und Höhe des PhotoImage-Objektes)
canvas = tk.Canvas(root, bd=0, highlightthickness=0, width=image_width,
height=photo_image.height())
canvas.pack()
#~~ Platziert das PhotoImage-Objekt auf die Canvas
image = canvas.create_image(0, 0, image=photo_image, anchor='nw')
root.mainloop()
Take it easy Mates!
- __blackjack__
- User
- Beiträge: 13549
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Update auf Python 3 + Auswahl der Farbverläufe und „reverse“ in der GUI statt vor dem Start im Quelltext:
Code: Alles auswählen
#!/usr/bin/env python3
# Skriptname tk_color_fading_01.py (wuf)
#
# Versuch: Horizontaler Farbverlauf auf einer Canvas mit Hilfe eines
# PhotoImage-Objektes.
import tkinter as tk
START_COLOR = "dark_red"
COLOR_NAME_TO_FADE_FUNCTION = {
"dark_blue": lambda value: (0, 0, value),
"dark_green": lambda value: (0, value, 0),
"dark_red": lambda value: (value, 0, 0),
"brite_blue": lambda value: (value, value, 255),
"brite_green": lambda value: (value, 255, value),
"brite_red": lambda value: (255, value, value),
"gray": lambda value: (value, value, value),
}
assert START_COLOR in COLOR_NAME_TO_FADE_FUNCTION
def color_from_rgb(rgb):
return "#{:02x}{:02x}{:02x}".format(*rgb)
def create_image(label, fade_function, reverse_fading):
data = list(range(256))
if reverse_fading:
data.reverse()
image = tk.PhotoImage(width=len(data), height=1)
image.put((tuple(color_from_rgb(fade_function(value)) for value in data),))
image = image.zoom(4, 300)
label["image"] = image
label.image = image
def main():
root = tk.Tk()
label = tk.Label(root, highlightthickness=0, border=0)
label.pack()
frame = tk.Frame(root)
frame.pack()
color_var = tk.StringVar(root)
reversed_var = tk.BooleanVar(root)
color_options = tk.OptionMenu(
frame, color_var, *COLOR_NAME_TO_FADE_FUNCTION.keys()
)
color_options.pack(side=tk.LEFT)
reversed_checkbutton = tk.Checkbutton(
frame, text="reverse", variable=reversed_var
)
reversed_checkbutton.pack(side=tk.LEFT)
color_var.set(START_COLOR)
reversed_var.set(False)
def callback(*_args):
create_image(
label,
COLOR_NAME_TO_FADE_FUNCTION[color_var.get()],
reversed_var.get(),
)
color_var.trace("w", callback)
reversed_checkbutton["command"] = callback
callback()
root.mainloop()
if __name__ == "__main__":
main()
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan