Bild in leinwand einfügen

Fragen zu Tkinter.
Antworten
Humpanickel
User
Beiträge: 7
Registriert: Donnerstag 13. November 2014, 09:08

Hallo,
ich habe eine Leinwand erzeugt, auf der in eine Grafik in Form eines Punktes mit der Maus bzw. den Pfeilen bewegen kann. Jetzt würde ich gerne den Hintergrund der erzeugten Leinwand bearbeiten. Ich kann zwar die Hintergrundfarbe verändern, jedoch kein Bild einfügen als Zeichenfläche:

# Leinwand zum Zeichnen
canvas = Canvas(master=tkFenster, bg='blue')
canvas.place(x=10, y=10, width=500, height=500)

Ich wäre euch wirklich sehr dankbar, wenn ihr mir helfen könntet ;D
BlackJack

@Humpanickel: Ein Bild kann man mit der `create_image()`-Methode auf ein `Canvas`-Exemplar bringen.

`place()` sollte man nicht verwenden. Absolutes platzieren von GUI-Elementen zieht nur unnötig Arbeit nach sich, zum Beispiel dass man dann die grösse des Fensters auch absolut selber angeben muss, statt Tk automatisch ermitteln zu lassen wie gross das Fenster sein muss, damit alles hinein passt. Ausserdem erstellt man mit `place()` GUIs die nur auf dem eigenen Rechner passend aussehen, oder zumindest nur auf solchen bei denen die ganzen Rahmenbedingungen (Displaygrösse/-auflösung, Schrifteinstellungen, Betriebssystem bzw. Fensterverwaltung, …) sehr ähnlich sind. Auf anderen kann es komisch aussehen oder sogar unbrauchbar werden.

Der Name `tkFenster` legt einen Blick in den Style Guide for Python Code nahe.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Hier ist mal ein Beispiel wie man das so machen kann:

Code: Alles auswählen

''' tk_Canvas_Background_Image1.py
use a Tkinter canvas for a background image
for result see http://prntscr.com/12p9ux
'''

try:
    # Python2
    import Tkinter as tk
except ImportError:
    # Python3
    import tkinter as tk

root = tk.Tk()
root.title('background image')

# pick a .gif image file you have in the working directory
fname = "Flowers.gif"
bg_image = tk.PhotoImage(file=fname)
# get the width and height of the image
w = bg_image.width()
h = bg_image.height()

# size the window so the image will fill it
root.geometry("%dx%d+50+30" % (w, h))

cv = tk.Canvas(width=w, height=h)
cv.pack(side='top', fill='both', expand='yes')

cv.create_image(0, 0, image=bg_image, anchor='nw')

# add canvas text at coordinates x=15, y=20
# anchor='nw' implies upper left corner coordinates
cv.create_text(15, 20, text="Python Greetings", fill="red", anchor='nw')

# now add some button widgets (optional)
btn1 = tk.Button(cv, text="Click")
btn1.pack(side='left', padx=10, pady=5, anchor='sw')

btn2 = tk.Button(cv, text="Quit", command=root.destroy)
btn2.pack(side='left', padx=10, pady=5, anchor='sw')

root.mainloop()

Atomkraftwerkaktienbesitzer
Humpanickel
User
Beiträge: 7
Registriert: Donnerstag 13. November 2014, 09:08

Vielen dank, aht mir sehr geholfen :D
Antworten