使用按钮将图像放在图像上

时间:2017-09-06 15:46:31

标签: button tkinter background-image python-3.6 tkinter-canvas

我目前有一个带有背景图片和按钮的画布。我试图得到它,以便当单击某个按钮时,新图像将被放置在背景图像和按钮的顶部。我现在拥有的是:

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 个答案:

答案 0 :(得分:1)

您正在强制窗口为特定大小。然后,您使用pack而没有任何选项,这意味着新画布打包到可用空间的顶部 。这意味着它被打包在另一个画布下面,这意味着它将不可见,因为第一个画布是窗口高度的两倍。

有许多解决方案,都取决于您想要发生的事情。首先,您可以通过添加新图像来重复使用现有画布,而不是创建新画布。或者,您可以在首次使用place_forget隐藏旧画布后使用新画布。或者,您可以使用gridplace来确保两个画布都放在同一位置的窗口上。