Hintergrund transparent?
-
- User
- Beiträge: 6
- Registriert: Freitag 9. Oktober 2009, 12:15
Kann man den Hintergrund eines Widgets in Tkinter transparent machen?
-
- User
- Beiträge: 6
- Registriert: Freitag 9. Oktober 2009, 12:15
Hallo numerix,
ich möchte ein Label anzeigen, jedoch so, dass nur die Schrift sichtbar ist und ein dahinter liegendes Bild durchscheint (nicht durch das Rechteck mit der background-color des Labels verdeckt ist).
ich möchte ein Label anzeigen, jedoch so, dass nur die Schrift sichtbar ist und ein dahinter liegendes Bild durchscheint (nicht durch das Rechteck mit der background-color des Labels verdeckt ist).
Zumindest scheint es keine einfache Methode zu geben...
http://www.python-forum.de/topic-19374.html
http://www.python-forum.de/topic-19374.html
Take it easy Mates!
-
- User
- Beiträge: 6
- Registriert: Freitag 9. Oktober 2009, 12:15
Hallo wuf,wuf hat geschrieben:Hallo Rainer Walesch
Meinst du so etwas:
http://paste.pocoo.org/show/145745/
Gruss wuf
vom Ergebnis der Darstellung ist es der gewünschte Effekt. Von der Programmierung her hätte ich mir so etwas in der Art gewünscht, wie es Pascal beschrieben hat. Aber so etwas gibt es ja anscheinend in tkinter nicht.
Danke für die Beiträge.
Hallo RainerWalesch
Mit der Zuhilfenahme des PIL-Packages lässt sich etwas machen.. Das folgende Testskript zeichnet ein durchsichtiges Rechteck auf ein jpg-Bild. Das Bild 'my_image.jpg' musst du selber zur Verfügung stellen:
Gruss wuf
Mit der Zuhilfenahme des PIL-Packages lässt sich etwas machen.. Das folgende Testskript zeichnet ein durchsichtiges Rechteck auf ein jpg-Bild. Das Bild 'my_image.jpg' musst du selber zur Verfügung stellen:
Code: Alles auswählen
# wuf_ref: blended_rectangle_01_01.py
import Tkinter as tk
from PIL import Image, ImageTk, ImageDraw
from os import listdir,curdir
class BlendedRectangle(object):
def __init__(self, xpos=0, ypos=0, width=10, height=10, image=None,
fill='black', intensity=1.0):
self.xpos = xpos
self.ypos = ypos
self.width = width
self.height = height
self.image = image
self.fill = fill
self.intensity = intensity
#~~ Label-Koordinaten
self.coords = (self.xpos, self.ypos, self.xpos+self.width,
self.ypos+self.height)
#~~ Labelhintergrung Imageobjekt
self.bottom_image = self.image.crop(self.coords)
#~~ Labelvordergrung Imageobjekt
self.top_image = self.image.crop(self.coords)
self.draw = ImageDraw.Draw(self.top_image)
self.draw.polygon([
(0, 0), (self.width, 0), (self.width, self.height),
(0, self.height), (0, 0)], fill= self.fill)
self.blended_graphic_obj = Image.blend(self.bottom_image,
self.top_image, self.intensity)
self.image.paste(self.blended_graphic_obj, (self.xpos , self.ypos))
self.tk_image = ImageTk.PhotoImage(self.image)
root = tk.Tk()
image = Image.open("my_image.jpg")
image_width, image_height = image.size
canvas = tk.Canvas(root, width=image_width, height=image_height)
canvas.pack()
image_obj = BlendedRectangle(10, 10, 50, 50, image, 'red', intensity=0.3)
canvas.create_image(0, 0, image=image_obj.tk_image, anchor='nw')
root.mainloop()
Take it easy Mates!
-
- User
- Beiträge: 6
- Registriert: Freitag 9. Oktober 2009, 12:15
Hallo wuf,
was ist das PIL? Wo bekommt man es her?
Grüsse
RainerWalesch
was ist das PIL? Wo bekommt man es her?
Grüsse
RainerWalesch
RainerWalesch
Das PIL-Package kannst du hier runterladen:
http://www.pythonware.com/products/pil/
Die Kommentarzeilen 20, 24, 27 in meinem Testskript stimmen nicht du kannst sie rauslöschen.
Gruss wuf
Das PIL-Package kannst du hier runterladen:
http://www.pythonware.com/products/pil/
Die Kommentarzeilen 20, 24, 27 in meinem Testskript stimmen nicht du kannst sie rauslöschen.
Gruss wuf
Take it easy Mates!
-
- User
- Beiträge: 6
- Registriert: Freitag 9. Oktober 2009, 12:15
Hallo wuf,wuf hat geschrieben:RainerWalesch
Das PIL-Package kannst du hier runterladen:
http://www.pythonware.com/products/pil/
Die Kommentarzeilen 20, 24, 27 in meinem Testskript stimmen nicht du kannst sie rauslöschen.
Gruss wuf
danke für den Tip
Gruss Rainer
......Hier als Fortsetzung noch ein Testskript mit transparenten Labels:
Das jpg-Bild und ttf-Fonts musst du selber zur Verfügung stellen. Bei Linux SuSE11.0 habe ich einige ttf-Zeichensätze unter:
/usr/share/fonts/truetype
gefunden.
Gruss wuf
Code: Alles auswählen
# wuf_ref: blended_label_01_01.py
import Tkinter as tk
from PIL import Image, ImageTk, ImageDraw, ImageFont
from os import listdir,curdir
class BlendedLabel(object):
def __init__(self, xpos=0, ypos=0, image=None, text='', color='black',
font_type=None, font_size=10, intensity=1.0):
self.xpos = xpos
self.ypos = ypos
self.image = image
self.label_text = text
self.label_color = color
self.font_type = font_type
self.font_size = font_size
self.intensity = intensity
#~~ Erstelle Truetype-Objekt
self.label_font = ImageFont.truetype(self.font_type,
self.font_size)
#~~ Ermittle die Abmessungen des Labeltextes
self.label_width, self.label_height = self.label_font.getsize(
self.label_text)
#~~ Label-Koordinaten
self.coords = (self.xpos, self.ypos, self.xpos+self.label_width,
self.ypos+self.label_height)
#~~ Labelhintergrung Imageobjekt
self.label_back_image = self.image.crop(self.coords)
#~~ Labelvordergrung Imageobjekt
self.label_front_image = self.image.crop(self.coords)
#~~ Schreibe den Labeltext auf das Labelvordergrund Imageobjekt
self.draw = ImageDraw.Draw(self.label_front_image)
self.draw.text((0, 0), self.label_text,
fill=self.label_color, font=self.label_font)
self.label_blended = Image.blend(self.label_back_image,
self.label_front_image, self.intensity)
self.image.paste(self.label_blended, (self.xpos , self.ypos))
self.tk_image = ImageTk.PhotoImage(self.image)
#~~ Haupt-Fenster erzeugen
root = tk.Tk()
canvas = tk.Canvas(root, width=1000, height=700)
canvas.pack()
image = Image.open("my_image.jpg")
#~~ Label mit 50% Intensität
image_obj = BlendedLabel(10, 10, image, 'Label', 'red', 'my_truetype_font.ttf',
40, 0.5)
canvas.create_image(0, 0, image=image_obj.tk_image, anchor='nw')
#~~ Label mit 30% Intensität
image_obj = BlendedLabel(10, 50, image, 'Label', 'red', 'my_truetype_font.ttf',
40, 0.3)
canvas.create_image(0, 0, image=image_obj.tk_image, anchor='nw')
root.mainloop()
/usr/share/fonts/truetype
gefunden.
Gruss wuf
Take it easy Mates!
-
- User
- Beiträge: 6
- Registriert: Freitag 9. Oktober 2009, 12:15
Hallo wuf,
danke.
Grüsse
Rainer
danke.
Grüsse
Rainer