Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态PySimpleGUI按钮(Python)_Python_Image_Button_Text_Pysimplegui - Fatal编程技术网

动态PySimpleGUI按钮(Python)

动态PySimpleGUI按钮(Python),python,image,button,text,pysimplegui,Python,Image,Button,Text,Pysimplegui,假设我有一个显示单词的按钮,当我点击它时,我希望它显示一个图像,我这样做: x,y=event window_play.FindElement(event).Update(image_filename=(imgs_path + os.sep + "Back.png")) 它按预期工作。但我正在努力的是在第二次点击后回到原始视图。我曾经考虑过复制这个按钮(它实际上是一个按钮矩阵(这就是为什么X和Y,但让我们关注其中一个))并将状态保持在布尔值(布尔值矩阵)中,这可能有效,也可

假设我有一个显示单词的按钮,当我点击它时,我希望它显示一个图像,我这样做:

x,y=event
window_play.FindElement(event).Update(image_filename=(imgs_path + os.sep + "Back.png"))
它按预期工作。但我正在努力的是在第二次点击后回到原始视图。我曾经考虑过复制这个按钮(它实际上是一个按钮矩阵(这就是为什么X和Y,但让我们关注其中一个))并将状态保持在布尔值(布尔值矩阵)中,这可能有效,也可能无效,但这不是错误本身。问题是,我不知道怎么做,是更新整个按钮,还是只更新文本,还是。。什么(正确/错误时)。 我曾考虑过使用元素可见性,但不完全确定如何使用


提前感谢您提供的任何提示。

如果没有图像,最好为按钮创建一个空白图像

演示代码,这里没有图像文件,所以使用内部base64对PySimpleGUI中的图像进行编码,并通过Pillow/PIL创建一个相同大小的空白图像

导入base64
从io导入字节io
从PIL导入图像
将PySimpleGUI导入为sg
sg.主题(“暗蓝色3”)
sg.set_选项(字体=(“Courier New”,16))
#获取图像大小'sg.EMOJI\u BASE64\u快乐\u大大的微笑`
buffer=BytesIO(base64.b64解码(sg.EMOJI\u base64\u HAPPY\u BIG\u SMILE))
im1=图像打开(缓冲区)
宽度、高度=im1.5英寸
#创建空白图像
im2=图像。新建(“RGBA”(宽度、高度),“#ffffff00”)
以BytesIO()作为输出:
im2.保存(输出,格式=“PNG”)
blank=output.getvalue()
#保存在`element.metadata'中的按钮的图像状态`
布局=[[sg.按钮(“,图像_数据=空白,键=(j,i),元数据=假)用于范围(3)中的i]用于范围(3)中的j]
window=sg.window(“Title”,布局,finalize=True)
尽管如此:
事件,值=window.read()
如果事件发生(sg窗口关闭,“退出”):
打破
elif类型(事件)=元组:
元素=窗口[事件]
如果element.metadata:
元素更新(图像数据=空白)
其他:
element.update(image\u data=sg.EMOJI\u BASE64\u HAPPY\u BIG\u SMILE)
element.metadata=不是element.metadata
window.close()

运行此程序时,我遇到两个错误,“BytesIO”没有找到(我通过从“io”导入它进行了修复,我不知道,但查找了它),而“base64”也给我带来了一些麻烦。但这确实是个好主意,我需要尝试一下这段代码。好吧,我不能重新编辑它,但我让它工作了。这正是a所需要的,这将帮助我继续前进,非常感谢!