0

現在、キャンバスに背景画像とその上にボタンがあります。私は特定のボタンをクリックすると、新しいイメージが背景イメージとボタンの上に置かれるようにしようとしています。私が今持っていることはこれです:私はこれを実行するとボタンを使用して画像に画像を配置する

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

、背景画像とボタンの両方が罰金出てくるが、私はボタンをクリックすると、何も起こりません。

ありがとうございました!

答えて

1

強制的にウィンドウを特定のサイズにしています。次に、任意のオプションなしでpackを使用します。これは、新しいキャンバスが、利用可能なスペースの上部にパックされていることを意味します。つまり、それは他のキャンバスの下に詰め込まれています。つまり、最初のキャンバスがウィンドウの高さの2倍なので、表示されません。

解決策はたくさんありますが、そのすべてはあなたが何をしたいのかによって決まります。 1つは、新しいキャンバスを作成する代わりに、新しいイメージを追加して既存のキャンバスを再利用するだけです。または、最初にplace_forgetを隠すと、新しいキャンバスを使用できます。または、gridまたはplaceを使用して、両方のキャンバスが同じ場所のウィンドウに配置されるようにすることができます。

+0

ご協力ありがとうございます。私がしようとしているのは、基本的にボタンを押したときに「新しい画面」が表示されるようにすることです。私はそれにボタンを置くことができるようにも元のものに戻ることができるようにしたい。私はそれをどうやってやるかもしれないという提案はありますか? – Matt

関連する問題