Python中tk界面图片显示、隐藏、动态更换
最近给女朋友写了个小程序,界面用Python的tkinter实现的,但是需要动态更换图片,这让我思考良久,最终阅读一些文章获得解答。不太想总结,所以直接放源代码吧,就是留给自己看的
程序的图片用的Label实现
#-*- coding: utf-8 -*-
from tkinter import *
import random
import datetime
num = 0
lastdata = ''
def solution():
frm = Tk()
data = []
with open('./data/菜单.txt', 'r', encoding='utf-8') as f:
line = f.readline().replace('\n', '')
while line:
data.append(line)
line = f.readline().replace('\n', '')
n = len(data)
frm.title('今天中午吃啥??————孔小凤专属by云京')
frm.geometry('500x500')
lucky = random.randint(1,10)
label1 = Label(frm, text='今天幸运数字:'+str(lucky)+' 这边建议您点'+str(lucky)+'次',font=('宋体','15')).place(relx=0.1,rely=0.0,relheight=0.1,relwidth=0.8)
listb = Listbox(frm,font=('宋体','30'))
listb.place(relx=0.1,rely=0.2,relheight=0.3,relwidth=0.8)
note_gif3 = PhotoImage(file='./data/note.gif')#提示图片
label_note = Label(frm, image=note_gif3)
label_img = Label(frm)#美食图片
def do():
global num,lastdata
num += 1
if num>lucky:
listb.delete(0,END)
listb.insert(0, '点了这么多次')
listb.insert(1, '还没决定呢?')
listb.insert(2, '说好的吃'+lastdata)
label_img.place_forget()#隐藏美食图片
label_note.place(relx=0.3, rely=0.5, relheight=0.4, relwidth=0.4)#显示提示图片
num = 0
else:
choice = random.randint(0, n - 1)
nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
listb.delete(0, END)
listb.insert(0, nowTime)
listb.insert(1,'今天吃'+data[choice])
lastdata = data[choice]
label_note.place_forget()
img_data = './data/'+data[choice]+'.gif'#换成对应的美食图片
img_gif = PhotoImage(file=img_data)
label_img.config(image=img_gif)#重新设置label图片(重点)
label_img.image = img_gif#刷新一下(重点)
label_img.place(relx=0.1, rely=0.5, relheight=0.4, relwidth=0.8)
img_gif1 = PhotoImage(file='./data/btn.gif')
btn = Button(frm, text='吃 啥 ',font=('宋体','25'),image=img_gif1,compound=RIGHT,command=do)
btn.place(relx=0.35,rely=0.1,relheight=0.1,relwidth=0.3)
frm.mainloop()
if __name__ == '__main__':
solution()