管脚 2023-05-14 08:22 采纳率: 50%
浏览 55
已结题

我想在按钮上显示一个图片,请问是怎么回事(标签-python)

我想在按钮上显示一个图片,但是按照下面代码,图片根本显示不出来,请问是怎么回事



```python

#读取图片 仅用于tk
def get_img(path:str):
    return itk.PhotoImage(Image.open(path,mode='r'))


button = tk.Button(top,text="导入",width=30,height=3,command=imp,image=get_img('B_import.png')).place(x=680,y=380)


如图所示

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/303288320486191.png "#left")
  • 写回答

7条回答 默认 最新

  • 红色荷包蛋 2023-05-14 08:29
    关注
    获得1.35元问题酬金

    码字不易,有用望采纳 答案参考Chatgpt解答
    根据你提供的代码,有几个可能的原因导致图片无法显示在按钮上:

    1. 导入的模块不正确:请确保你已经正确导入了所需的模块,包括tkinterPIL库(PIL库用于处理图像)。正确的导入方式如下:
    import tkinter as tk
    from PIL import Image, ImageTk
    
    1. 图片路径不正确:检查图片路径是否正确,并确保图片文件存在。可以使用绝对路径或相对路径指定图片的位置。确保path参数传递给get_img函数的值是正确的。

    2. 图片对象的生命周期问题:在你的代码中,get_img函数返回一个PhotoImage对象,但该对象没有被引用保存下来,而是直接传递给了Buttonimage参数。这可能导致垃圾回收机制将其清除,从而导致图片无法显示。你可以将get_img函数返回的PhotoImage对象保存到一个变量中,确保它在整个应用程序的生命周期内都保持有效。

    以下是修正后的代码示例:

    import tkinter as tk
    from PIL import Image, ImageTk
    
    def get_img(path: str):
        return ImageTk.PhotoImage(Image.open(path, mode='r'))
    
    top = tk.Tk()
    button_image = get_img('B_import.png')
    button = tk.Button(top, text="导入", width=30, height=3, command=imp, image=button_image)
    button.place(x=680, y=380)
    
    top.mainloop()
    

    在修复后的代码中,get_img函数返回的PhotoImage对象被保存在了button_image变量中,并传递给了Buttonimage参数。这样就保证了PhotoImage对象在整个应用程序的生命周期内有效,从而能够正确显示图片。

    请注意,以上代码仅为修复了图片显示问题的示例,可能需要根据你的实际情况进行调整。如果问题仍然存在,你可以提供更多的代码和错误信息,以便我能够更具体地帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 锌合金的耐温能到多少度。可以持续多长时间
  • ¥15 .net调用本地office组件出现问题
  • ¥15 docker镜像拉取失败请教教我
  • ¥15 https访问nginx上的http
  • ¥15 需要完整规则的五子棋博弈代码
  • ¥15 Hadoop的部署与安装的一些疑问
  • ¥15 短剧的sdk在哪里接入
  • ¥30 智能割草机自动化割草
  • ¥15 求:可不可以提供一些 在国内可以用,低代码不要太难 在电脑上可以下载的 制作app的软件
  • ¥15 fluke高精度万用表8845A型号测交流电压一直跳动,且去掉输入后显示不归零