gpt4 book ai didi

python - 按下按钮时显示一组重复图像的简单图形用户界面

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:21 24 4
gpt4 key购买 nike

我制作了一个非常简单的图形用户界面,它有一个按钮并显示一个图像 (.gif)。我的目标是在您按下按钮时输出另一个 .gif。我的文件目录中有 2 个 .gif 文件,关键是只要你按下按钮,就会在这两个文件之间切换。

#Using python2.7.2
import Tkinter

root = Tkinter.Tk()

try:
n
except:
n = 0

def showphoto(par):
if par%2 == 0:
try:
label2.destroy()
except:
pass
photo = Tkinter.PhotoImage(file="masc.gif")
label2 = Tkinter.Label(image=photo)
label2.image = photo
label2.pack()

else:
try:
label2.destroy()
except:
pass
photo = Tkinter.PhotoImage(file="123.gif")
label2 = Tkinter.Label(image=photo)
label2.image = photo
label2.pack()

myContainer1 = Tkinter.Frame(root, width = 100, height = 100)
myContainer1.pack()

def callback(event):
global n
showphoto(n)
n = n + 1

button1 = Tkinter.Button(myContainer1)
button1["text"]= "Next pic"
button1["background"] = "green"
button1.bind("<Button-1>", callback(n))
button1.pack()

root.mainloop()

当前代码只输出第一张图片 (masc.gif) 但当我按下按钮时它不会切换到另一张图片 (123.gif) .我做错了什么?

最佳答案

使用类可以更轻松地实现这一点,因为类无需使用全局变量即可保存所有必要的数据。

import Tkinter as tk
from collections import OrderedDict

class app(tk.Frame):
def __init__(self,master=None, **kwargs):
self.gifdict=OrderedDict()
for gif in ('masc.gif','123.gif'):
self.gifdict[gif]=tk.PhotoImage(file=gif)
tk.Frame.__init__(self,master,**kwargs)
self.label=tk.Label(self)
self.label.pack()
self.button=tk.Button(self,text="switch",command=self.switch)
self.button.pack()
self.switch()

def switch(self):
#Get first image in dict and add it to the end
img,photo=self.gifdict.popitem(last=False)
self.gifdict[img]=photo
#display the image we popped off the start of the dict.
self.label.config(image=photo)

if __name__ == "__main__":
A=tk.Tk()
B=app(master=A,width=100,height=100)
B.pack()
A.mainloop()

当然,这可以更普遍地完成......(例如可以传入要循环的图像列表),这将切换 self.gifs 中的所有图像......

这种方法还消除了每次销毁和重新创建标签的必要性,而我们只是重复使用已有的标签。

编辑

现在我使用 OrderedDict 来存储文件。 (键=文件名,值=照片图像)。然后我们从字典中弹出第一个元素来绘制。当然,如果你使用的是python2.6或更早的版本,你可以在字典之外保留一个列表,并使用列表来获取键。

关于python - 按下按钮时显示一组重复图像的简单图形用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10261045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com