0

J'ai actuellement une toile avec une image de fond et des boutons dessus. J'essaye de l'obtenir de sorte que quand un certain bouton est cliqué, une nouvelle image sera placée au-dessus de l'image et des boutons d'arrière - plan. Ce que j'est en ce moment ceci:Placer une image sur une image avec des boutons

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() 

Quand je lance cela, l'image d'arrière-plan et le bouton deux viennent bien, mais quand je clique sur le bouton, rien ne se passe.

Merci d'avance pour toute aide!

Répondre

1

Vous forcez la taille de la fenêtre. Ensuite, vous utilisez pack sans aucune option, ce qui signifie que la nouvelle toile est emballée vers le haut de l'espace disponible. Cela signifie qu'il est empaqueté sous l'autre toile, ce qui signifie qu'il ne sera pas visible puisque la première toile est deux fois plus haute que la hauteur de la fenêtre.

Il existe de nombreuses solutions, qui dépendent toutes de ce que vous voulez. Pour un, au lieu de créer un nouveau canevas, vous pouvez simplement réutiliser le canevas existant en ajoutant une nouvelle image. Ou, vous pouvez utiliser une nouvelle toile après avoir d'abord masqué l'ancien avec place_forget. Ou, vous pouvez utiliser grid ou place pour vous assurer que les deux canevas sont placés sur la fenêtre au même endroit.

+0

Je vois, merci pour votre aide. Ce que j'essaie de faire, c'est d'avoir un "nouvel écran" quand j'appuie sur le bouton. Je veux pouvoir y placer des boutons et revenir à l'original. Avez-vous des suggestions sur la façon dont je pourrais faire cela? – Matt