You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Tkinter开发图形计算器时出现TypeError: can only concatenate str (not "int") to str错误求助

解决Tkinter按钮加载图片时的TypeError问题

嘿,咱们来搞定你遇到的这个错误!你看到的TypeError本质是因为创建Button时参数传错了——Tkinter的Button构造函数里,第二个位置参数默认是text(用来设置按钮文字的),你直接把PhotoImage对象传进去,程序会误以为你要设置按钮文本,试图把这个图片对象和字符串拼接,这就导致了类型不匹配的错误。

修正后的代码

from tkinter import *
# 你导入了PIL但当前代码没用到,如果后续要处理jpg这类Tkinter不支持的格式,再用PIL.ImageTk.PhotoImage就行
window = Tk()
window.geometry('680x815')
window.resizable(width=False, height=False)

# 加载背景图
photo_bg = PhotoImage(file=r'C:\Users\Lenovo\Desktop\behrad\calc.png')
label_bg = Label(window, image=photo_bg)
label_bg.place(x=30, y=0, height=780)

# 加载按钮图片并创建按钮
photo_0 = PhotoImage(file=r'C:\Users\Lenovo\Desktop\behrad\calc.0.png')
# 关键:要用`image=`关键字参数指定图片,还可以加borderwidth=0去掉默认的按钮边框
button_0 = Button(window, image=photo_0, borderwidth=0)
button_0.place(x=100, y=600)  # 记得给按钮设置位置,不然窗口里看不到它哦
window.mainloop()

几个额外的小提示

  • 按钮必须布局:创建按钮后一定要用place()/pack()/grid()其中一种布局方法设置位置,不然按钮会被隐藏,你根本看不到它。
  • 防止图片被回收:如果你的图片是在函数内部定义的,记得把图片对象绑定到按钮或者窗口的属性上(比如button_0.image = photo_0),不然Python的垃圾回收机制会把图片对象销毁,导致按钮变成空白。你现在的代码是全局变量,暂时不会有这个问题,但函数里用的时候一定要注意。
  • 处理更多图片格式:如果你的按钮图片是jpg这类Tkinter原生PhotoImage不支持的格式,就需要用PIL来转换,示例代码如下:
    from PIL import Image, ImageTk
    # 用PIL打开图片并转换为Tkinter可用的格式
    photo_0 = ImageTk.PhotoImage(Image.open(r'C:\Users\Lenovo\Desktop\behrad\calc.0.jpg'))
    

内容的提问来源于stack exchange,提问作者user17285516

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:42:48