Seite 1 von 1
Tkinter Hintergrundbild
Verfasst: Montag 13. Februar 2012, 20:05
von Foxi300
Hallo Leute,
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
Re: Tkinter Hintergrundbild
Verfasst: Dienstag 14. Februar 2012, 10:15
von wuf
Hi Foxi300
Hier ein bisschen Code:
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()
Gruß wuf

Re: Tkinter Hintergrundbild
Verfasst: Dienstag 14. Februar 2012, 10:49
von problembär
Hmm, ein farbloses Canvas ist eine interessante Idee.
Und dann ein Button mit Parent "None"? Das ist schon ungewöhnlich.
Kann insgesamt aber ziemlich schick aussehen.
Re: Tkinter Hintergrundbild
Verfasst: Dienstag 14. Februar 2012, 12:10
von wuf
Hi Problembär
problembär hat geschrieben:Hmm, ein farbloses Canvas ist eine interessante Idee.
Bei mir ist es nicht farblos.
problembär hat geschrieben:Und dann ein Button mit Parent "None"? Das ist schon ungewöhnlich.
Für mich nicht. Was würdest du dann an Stelle von None verwenden?
problembär hat geschrieben:Kann insgesamt aber ziemlich schick aussehen.
Bei mir sieht es hübsch aus.
OS ist allerdings Linux & Python2.6
Gruß wuf

Re: Tkinter Hintergrundbild
Verfasst: Mittwoch 15. Februar 2012, 11:56
von problembär
wuf hat geschrieben:Hi Problembär
problembär hat geschrieben:Hmm, ein farbloses Canvas ist eine interessante Idee.
Bei mir ist es nicht farblos.
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:problembär hat geschrieben:Und dann ein Button mit Parent "None"? Das ist schon ungewöhnlich.
Für mich nicht. Was würdest du dann an Stelle von None verwenden?
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:problembär hat geschrieben:Kann insgesamt aber ziemlich schick aussehen.
Bei mir sieht es hübsch aus.
OS ist allerdings Linux & Python2.6
Na ja, mit Linux & Python 2.4 bin ich davon auch nicht so weit weg.
Gruß
Re: Tkinter Hintergrundbild
Verfasst: Donnerstag 16. Februar 2012, 12:19
von wuf
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.
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.
Hier das Snippet, welches eine Exception wirft:
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()
Hier das Snippet ohne Exception-Wurf:
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()
Gruß wuf

Re: Tkinter Hintergrundbild
Verfasst: Donnerstag 16. Februar 2012, 13:17
von Kebap
Funktioniert auch unter Windows, danke!

Re: Tkinter Hintergrundbild
Verfasst: Donnerstag 16. Februar 2012, 14:46
von Foxi300
Danke

Re: Tkinter Hintergrundbild
Verfasst: Freitag 18. Mai 2018, 15:18
von Phobit
Hallo,
als ich diesen Thread gelesen habe wurde ich neugierig. Mir ist es nicht möglich, da einen Button darauf anzeigen zu lassen. ich habe ein Skript in Python 3 geschrieben, dass mir ein Hintergrund Bild anzeigt, aber die Buttons werden mir nicht angezeigt... Weiß wer warum? hier wäre der Code:
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()
Re: Tkinter Hintergrundbild
Verfasst: Freitag 18. Mai 2018, 15:36
von __deets__
Erstens ist dieser Thread von 2012. Da noch Antworten zu erwarten ist ... zuversichtlich.
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....
Re: Tkinter Hintergrundbild
Verfasst: Freitag 18. Mai 2018, 15:42
von Phobit
__deets__ hat geschrieben: Freitag 18. Mai 2018, 15:36
Erstens ist dieser Thread von 2012. Da noch Antworten zu erwarten ist ... zuversichtlich.
wow... man sieht, es antwortet jemand, somit war mein Ansatz ja nicht völlig falsch!
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....
Und ja, meiner Meinung nach schon! Aber jetzt hat sich jemand auf dem ersten gemeldet, dann kann ich ja bei zwei aufhören....
(oder ich mach weiter, nur um dich zu triggern

)
Re: Tkinter Hintergrundbild
Verfasst: Freitag 18. Mai 2018, 15:52
von __deets__
Na dann, viel Erfolg mit deiner Strategie. Viel hilft ja bekanntlich viel, auch beim auf die Nerven gehen von Leuten, von denen man sich Hilfe erwartet.