wie kann ich in Tkinter ein Hintergrundbild einfügen, welches den ganzen Hintergrund bedeckt?
Die Buttons und Labels sollen natürlich darüber sein

Schonmal vielen Dank im Voraus und viele Grüße,
Foxi300
Code: Alles auswählen
import Tkinter as tk
app_win = tk.Tk()
back_gnd = tk.Canvas(app_win)
back_gnd.pack(expand=True, fill='both')
back_gnd_image = tk.PhotoImage(file="image.gif")
back_gnd.create_image(0, 0, anchor='nw', image=back_gnd_image)
button = tk.Button(None, text="Button", bd=1, highlightthickness=0)
back_gnd.create_window(20,20, window=button, anchor='nw')
app_win.mainloop()
Bei mir ist es nicht farblos.problembär hat geschrieben:Hmm, ein farbloses Canvas ist eine interessante Idee.
Für mich nicht. Was würdest du dann an Stelle von None verwenden?problembär hat geschrieben:Und dann ein Button mit Parent "None"? Das ist schon ungewöhnlich.
Bei mir sieht es hübsch aus.problembär hat geschrieben:Kann insgesamt aber ziemlich schick aussehen.
Ich meinte, bei einem Canvas setzt man sonst ja eher "fg = 'black', bg = 'white'", weil man darauf etwas zeichnen möchte. Man kann's natürlich auch in der allgemeinen Farbe des Hauptfensters belassen.wuf hat geschrieben:Hi ProblembärBei mir ist es nicht farblos.problembär hat geschrieben:Hmm, ein farbloses Canvas ist eine interessante Idee.
Sonst haben Widgets ja ein übergeordnetes Widget, im Zweifel das Hauptfenster (die tk.Tk()-Instanz). "master = None" ist hier wohl eine Besonderheit von "Canvas.create_window()". Hatte ich halt bisher noch nicht benutzt.wuf hat geschrieben:Für mich nicht. Was würdest du dann an Stelle von None verwenden?problembär hat geschrieben:Und dann ein Button mit Parent "None"? Das ist schon ungewöhnlich.
Na ja, mit Linux & Python 2.4 bin ich davon auch nicht so weit weg.wuf hat geschrieben:Bei mir sieht es hübsch aus.problembär hat geschrieben:Kann insgesamt aber ziemlich schick aussehen.
OS ist allerdings Linux & Python2.6
Deine Vermutung ist völlig richtig. Das mit dem 'None' als Ersatz für den master funktioniert nur wenn die Canvas dem Hauptfenster zugeordnet wurde. Sobald die Canvas einer Toplevel-Instanz zugeordnet wurde klemmt es mit dem 'None'. Da muss dem Button-Widget explizit die Referenz der Toplevel-Instanz als übergeordneter Master bekannt gegeben werden.problembär hat geschrieben:Sonst haben Widgets ja ein übergeordnetes Widget, im Zweifel das Hauptfenster (die tk.Tk()-Instanz). "master = None" ist hier wohl eine Besonderheit von "Canvas.create_window()". Hatte ich halt bisher noch nicht benutzt.
Code: Alles auswählen
import Tkinter as tk
app_win = tk.Tk()
app_win.title('Back-Image')
back_gnd = tk.Canvas(app_win)
back_gnd.pack(expand=True, fill='both')
back_gnd_image = tk.PhotoImage(file="image.gif")
back_gnd.create_image(0, 0, anchor='nw', image=back_gnd_image)
button = tk.Button(None, text="Button", bd=1, highlightthickness=0)
back_gnd.create_window(20,20, window=button, anchor='nw')
top_level = tk.Toplevel()
canvas_top = tk.Canvas(top_level)
canvas_top.pack()
button_top = tk.Button(None, text="Button", bd=1, highlightthickness=0)
canvas_top.create_window(20,20, window=button_top, anchor='nw')
app_win.mainloop()
Code: Alles auswählen
import Tkinter as tk
app_win = tk.Tk()
app_win.title('Back-Image')
back_gnd = tk.Canvas(app_win)
back_gnd.pack(expand=True, fill='both')
back_gnd_image = tk.PhotoImage(file="image.gif")
back_gnd.create_image(0, 0, anchor='nw', image=back_gnd_image)
button = tk.Button(None, text="Button", bd=1, highlightthickness=0)
back_gnd.create_window(20,20, window=button, anchor='nw')
top_level = tk.Toplevel()
canvas_top = tk.Canvas(top_level)
canvas_top.pack()
button_top = tk.Button(top_level, text="Button", bd=1, highlightthickness=0)
canvas_top.create_window(20,20, window=button_top, anchor='nw')
app_win.mainloop()
Code: Alles auswählen
from tkinter import *
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import messagebox
APP_TITLE = "JPEG-Hintergrund"
app_win = tk.Tk()
app_win.title(APP_TITLE)
pil_background_image = Image.open("talion.jpg")
app_win.tk_background_image = ImageTk.PhotoImage(pil_background_image)
width = app_win.tk_background_image.width()
height = app_win.tk_background_image.height()
canvas = tk.Canvas(app_win, width=width, height=height, highlightthickness=0)
canvas.pack()
canvas.create_image(0, 0, image=app_win.tk_background_image, anchor='nw', tag="Hintertgrund")
def Test():
messagebox.showinfo(message="Test!")
button = Button(app_win, text="Testen!", command=Test, height = 1, width = 12)
button.pack(side = LEFT)
button.config(background='white', foreground='white')
app_win.mainloop()
wow... man sieht, es antwortet jemand, somit war mein Ansatz ja nicht völlig falsch!__deets__ hat geschrieben: Freitag 18. Mai 2018, 15:36 Erstens ist dieser Thread von 2012. Da noch Antworten zu erwarten ist ... zuversichtlich.
Und ja, meiner Meinung nach schon! Aber jetzt hat sich jemand auf dem ersten gemeldet, dann kann ich ja bei zwei aufhören....Und zweitens hast du den exakt gleichen Code schon in einem anderen Thread gepostet. Glaubst du, dass du deine Chancen eher erhoest, wenn du die gleiche Frage mehrfach stellst? Wenn ja, warum dann schon bei zwei stoppen? Das kann man auch 20-mal fragen....