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
Tkinter Hintergrundbild
Hi Foxi300
Hier ein bisschen Code:
Gruß wuf
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()
Take it easy Mates!
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.
Und dann ein Button mit Parent "None"? Das ist schon ungewöhnlich.
Kann insgesamt aber ziemlich schick aussehen.
Hi Problembär
OS ist allerdings Linux & Python2.6
Gruß wuf
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.
OS ist allerdings Linux & Python2.6
Gruß wuf
Take it easy Mates!
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
Gruß
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.
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()
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()
Take it easy Mates!
Funktioniert auch unter Windows, danke!
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
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:
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()
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Hauptsache er funkt!
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....
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....
wow... man sieht, es antwortet jemand, somit war mein Ansatz ja nicht völlig falsch!
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....
(oder ich mach weiter, nur um dich zu triggern )
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Hauptsache er funkt!