2016-04-15 9 views
0

Gibt es eine Möglichkeit, ein Bild mit PIL in Python zu importieren und es als Hintergrund für einen ttk-Mainframe zu setzen, der sich über das gesamte Tkinter-Root-Fenster erstreckt? Bis jetzt habe ich nur Möglichkeiten gesehen, dies zu tun, ist eine Tkinter-Wurzel. Gibt es auch eine Möglichkeit, ttk selbst die Größe des Bildes anzupassen, so dass es, selbst wenn es klein ist, den gesamten Bildschirm abdeckt?Ttk-Hintergrundbild

Also zusammenfassend möchte ich ein Bild, das die gesamte ttk-Mainframe-Box abdeckt, ohne mich damit zu belasten, etwas anderes in den ttk-Frame zu stellen.

zum Beispiel , wenn das Bild das gesamte Fenster bedeckt, einen Befehl,

ttk.Button(root, text="Hello").grid(column=0, row=0, sticky=(N,S,W,E)) 

würde immer noch eine Schaltfläche in der Mainframe einzufügen. Danke :)

+1

10 Wozu dient ein ttk-Rahmen, wenn Sie ihn vertuschen wollen? Erstellen Sie einfach ein Label mit einem Bild und lassen Sie es das Fenster füllen. –

+0

Ich benutze nicht den ttk Rahmen nur für den Hintergrund ... Ich werde meine Schnittstelle auf dem .. Vielen Dank :) – LeroyJD

Antwort

2

Sie können keinen Bildhintergrund zu einem ttk Rahmen setzen, sie akzeptieren keine Bildoptionen. Sie könnten also einen ttk Rahmen erstellen und ein Etikett oder etwas darin einfügen und dann den Rahmen überspannen, indem Sie das folgende Beispiel anpassen.

Hier ist ein kleines Beispiel, das zeigt, was Sie wollen. Wir laden ein Bild mit pil, beachte, dass das verlinkte Bild (hoffentlich) kleiner ist als deine Bildschirmgröße.

Also, wir legen die Geometrie des Root-Fensters auf den gesamten Bildschirm das Bild ist kleiner als das, so dass wir die Größe ändern, um die gesamte Breite abzudecken. Sie können die Max- und Min-Höhe überschreiben und dann entsprechend einstellen. Nur ein Beispielwert. Dann platzieren wir die bg-Label- und Grid-Widgets darauf. Das Label hat eine niedrigere Stapelreihenfolge als die anderen Widgets, die Sie mit dem Raster platzieren, sodass sie oben angezeigt werden. Alternativ können Sie eine Leinwand oder ein anderes Widget verwenden. Mit einer Arbeitsfläche müssen Sie create_window verwenden, um Widgets in der Arbeitsfläche zu platzieren.

import tkinter as tk 
from tkinter import ttk 
from PIL import Image, ImageTk 

root = tk.Tk() 
width, height = root.winfo_screenwidth(), root.winfo_screenheight() 
#print(root.winfo_screenheight(), root.winfo_screenwidth()) 
root.geometry("%dx%d" % (width, height)) 
#URL FOR BACKGROUND 
#https://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&ved=0ahUKEwiVroCiyZHMAhXKeT4KHQHpDVAQjBwIBA&url=http%3A%2F%2Fwallpaperswide.com%2Fdownload%2Fblack_background_metal_hole_very_small-wallpaper-800x480.jpg&psig=AFQjCNEjZ7GDbjG9sFie-yXW3fP85_p0VQ&ust=1460840934258935 
image = Image.open("background.jpg") 
if image.size != (width, height): 
    image = image.resize((width, height), Image.ANTIALIAS) 
    #print("DONE RESIZING") 
    # image.save("background.jpg") 
#print(image.size) 
image = ImageTk.PhotoImage(image) 
bg_label = tk.Label(root, image = image) 
bg_label.place(x=0, y=0, relwidth=1, relheight=1) 
bg_label.image = image 
your_button = ttk.Button(root, text='This is a button') 
your_button.grid() 
root.mainloop()