以为利用Pillow库一级一级加载在界面就完事了,没有想到用Frame控件的时候,第一级界面图片可以显示,但第二级界面就不显示图片了。查了下资料,说是“多个函数包含导致图片无法显示的问题,即(def(def(def)))多函数包含问题”,正解是要把显示的图像变量设为全局变量去调用。
解决办法如下:
(程序裁剪了大部分,有点粗糙,但解决了二级图片加载不出来的问题,见谅😄)
from tkinter import * #需要安装tkinter库
import tkinter.messagebox
from PIL import Image, ImageTk
#加载图片的函数
photo = None **#设定一个全局变量!!!!**
def show_photo(filename,x,y):
photo_open = Image.open(filename)
global photo
photo = photo_open.resize((x , y))#图片尺寸
photo = ImageTk.PhotoImage(photo)
return photo
#二级界面为购物界面
def Online_Shopping():
print('在线购物')
main_frame.place_forget()
second_frame = Frame(top)
second_frame.place(relwidth=160,relheight= 2)
#加载“可乐”图片
img4 = show_photo("kele.png",69,108)
Label(second_frame,text= '照片', image = img4).place(x= 70,y = 100 )
Button4 = Button(second_frame,text = '可乐 2元',bg = 'white',font = ('黑体',12), width=13).place(x = 50,y = 230)
top = Tk()
top.title("无人超市")
top.geometry('800x600')
#一级界面
main_frame = Frame(top)
main_frame.place(relwidth=30,relheight= 2)
#加载“在线购物”图片
img1 = show_photo("12.png",150,150)
Label(main_frame,text= '在线购物', image =img1).place(x= 90,y =180 )
#“在线购物”按钮
Button1 = Button(main_frame,text = '在线购物',bg = 'green',font = ('黑体',12),width = 15,height = 4,command = Online_Shopping)
Button1.place(x= 100,y = 350)
top.mainloop()
效果如下:
1.一级界面
2.二级界面