使用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
相关产品推荐
相关产品推荐

