0

Ich habe derzeit eine Leinwand mit einem Hintergrundbild und Schaltflächen darüber. Ich versuche es so zu bekommen, dass beim Klicken auf eine bestimmte Schaltfläche ein neues Bild über das Hintergrundbild und die Schaltflächen gelegt wird. Was ich jetzt haben, ist dies:Platzieren Bild über ein Bild mit den Tasten

import tkinter as tk 
from xlrd import * 
from PIL import Image, ImageTk 

#GLOBAL VARIABLES 

WIDTH = 720 
HEIGHT = 960 

#create window 
window = tk.Tk() 
window.title("NFL") 
window.geometry("960x720") 

#create canvas 
canvas = tk.Canvas(window, width = WIDTH*2, height = HEIGHT*2) 
canvas.pack() 

#use NFL logo as background 
nfl_logo_image = Image.open('nfl.jpg') 
nfl_logo_image = nfl_logo_image.resize((HEIGHT, WIDTH), Image.ANTIALIAS) 
nfl_logo = ImageTk.PhotoImage(nfl_logo_image) 
canvas.create_image(0, 0, image = nfl_logo, anchor = 'nw') 

#CAR button 
def press_car_button(): 
    canvas2 = tk.Canvas(window, width = WIDTH*2, height = HEIGHT*2) 
    canvas2.pack() 
    big_car_logo = Image.open('car.png') 
    big_car_logo = big_car_logo.resize((WIDTH, WIDTH), Image.ANTIALIAS) 
    big_car_image = ImageTk.PhotoImage(big_car_logo) 
    canvas2.create_image(0, 0, image = big_car_image, anchor = 'nw') 

car_logo = Image.open('car.png') 
car_logo = car_logo.resize((70,70), Image.ANTIALIAS) 
car_image = ImageTk.PhotoImage(car_logo) 
car_button = tk.Button(window, image = car_image, height = 70, width = 70, command = press_car_button) 
car_button_window = canvas.create_window(720, 195, anchor = 'nw', window = car_button) 

#run GUI 
window.mainloop() 

Als ich dies ausführen, das Hintergrundbild und Taste beide kommen in Ordnung, aber wenn ich auf die Schaltfläche klicken, passiert nichts.

Vielen Dank im Voraus für jede Hilfe!

Antwort

1

Sie zwingen das Fenster, eine bestimmte Größe zu haben. Dann verwenden Sie pack ohne Optionen, was bedeutet, dass die neue Leinwand nach oben des verfügbaren Speicherplatz verpackt ist. Das bedeutet, dass es unter der anderen Leinwand gepackt ist, was bedeutet, dass es nicht sichtbar ist, da die erste Leinwand doppelt so hoch ist wie die Fensterhöhe.

Es gibt viele Lösungen, die alle davon abhängen, was genau passieren soll. Zum einen können Sie, anstatt eine neue Leinwand zu erstellen, einfach die vorhandene Leinwand erneut verwenden, indem Sie ein neues Bild hinzufügen. Oder Sie können eine neue Leinwand verwenden, nachdem Sie die alte mit place_forget versteckt haben. Oder Sie können grid oder place verwenden, um sicherzustellen, dass beide Leinwände an derselben Stelle im Fenster angezeigt werden.

+0

Ich sehe, danke für Ihre Hilfe. Was ich versuche, ist im Grunde ein "neuer Bildschirm", wenn ich den Knopf drücke. Ich möchte in der Lage sein, Knöpfe darauf zu setzen und auch zum ursprünglichen zurückzugehen. Hast du irgendwelche Vorschläge, wie ich das machen könnte? – Matt