Python中Tkinter组件无法显示图片的问题求助
Tkinter图片不显示的解决方法
你的代码里图片不显示主要有两个核心问题,还有一个容易遗漏的细节:
1. 图片对象被垃圾回收
bank_img是__init__方法里的局部变量,当这个方法执行结束后,Python的垃圾回收机制会自动回收这个变量,导致Label失去对应的图片资源,自然无法显示。解决办法是把图片对象绑定为类的实例属性,让它和窗口实例的生命周期保持一致。
2. Windows路径转义问题
你写的路径里用了反斜杠\,在Python字符串中这是转义字符,比如\U会被解析成Unicode转义序列,直接导致路径识别错误。可以用三种方式修正:
- 把反斜杠改成正斜杠
/ - 在路径字符串前加
r,变成原始字符串(不解析转义字符) - 把反斜杠写成双反斜杠
\\
3. 遗漏主事件循环
你的代码里没加root.mainloop(),这是启动Tkinter窗口主事件循环的关键,没有它窗口会直接关闭,根本看不到内容。
另外建议不要把Label(...)和.pack()写在同一行,因为.pack()返回的是None,后续如果要操作这个Label对象会找不到。
修改后的完整代码
from tkinter import * class window1: def __init__(self, parent, word, geometry): # 修正路径并将图片绑定为实例属性 self.bank_img = PhotoImage(file=r'C:\Users\user\PycharmProjects\pythonProject3\bank-988164_640.png') self.parent = parent self.word = word self.geometry = geometry parent.geometry(geometry) parent.title(self.word) # Label创建和布局分开写,避免变量指向None label = Label(parent, text="Welcome to the bank", height=3) label.pack() bank_logo = Label(parent, image=self.bank_img) bank_logo.pack() root = Tk() app = window1(root, 'beginner bank system', '300x300') root.mainloop() # 启动主事件循环
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

