我目前有一个带有背景图片和按钮的画布。我试图得到它,以便当单击某个按钮时,新图像将被放置在背景图像和按钮的顶部。我现在拥有的是:
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()
当我运行它时,背景图像和按钮都很好,但是当我点击按钮时,没有任何反应。
提前感谢您的帮助!
答案 0 :(得分:1)
您正在强制窗口为特定大小。然后,您使用pack
而没有任何选项,这意味着新画布打包到可用空间的顶部 。这意味着它被打包在另一个画布下面,这意味着它将不可见,因为第一个画布是窗口高度的两倍。
有许多解决方案,都取决于您想要发生的事情。首先,您可以通过添加新图像来重复使用现有画布,而不是创建新画布。或者,您可以在首次使用place_forget
隐藏旧画布后使用新画布。或者,您可以使用grid
或place
来确保两个画布都放在同一位置的窗口上。