Python3.6中遍历文件名列表blit多张图片无显示问题求助
解决Pygame循环Blit图片不显示的问题
嘿,我瞅了下你的代码,问题主要出在这几个地方,咱们一步步给你捋顺:
- 没处理系统事件:Pygame窗口必须持续处理系统事件(比如关闭窗口、鼠标操作),不然系统会判定窗口“无响应”,哪怕你调用了
pygame.display.flip(),也可能看不到任何内容。 - 循环跑得太快:你的for循环会瞬间把所有图片加载并Blit完,每张图片显示时间短到肉眼根本抓不住,看起来就像啥都没显示一样。
- 路径正确性要确认:得检查
filenames里的图片路径是不是真的对,比如相对路径有没有写错,或者对应图片文件是不是真的存在?
给你改好的代码,直接就能用:
import pandas as pd import pygame import time # 初始化Pygame pygame.init() size = (640, 320) pygame.display.set_caption("Data viewer") screen = pygame.display.set_mode(size, pygame.DOUBLEBUF) myfont = pygame.font.SysFont("monospace", 15) # 读取数据文件 df = pd.read_csv('./result.csv') filenames = df['File'] # 主循环替换原来的for循环,加入事件处理和显示延迟 running = True current_img_idx = 0 total_imgs = len(filenames) while running: # 处理系统事件,确保窗口正常响应 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if current_img_idx < total_imgs: img_path = filenames.iloc[current_img_idx] try: # 加载当前图片 img = pygame.image.load(img_path) # 先填充背景,避免上一张图片残留 screen.fill((0, 0, 0)) # 将图片绘制到屏幕 screen.blit(img, (0, 0)) # 更新显示 pygame.display.flip() # 每张图片停留0.5秒,可根据需求调整时长 time.sleep(0.5) current_img_idx += 1 except pygame.error: # 捕获图片加载失败的情况,避免程序崩溃 print(f"加载失败:{img_path} 不存在或格式错误") current_img_idx += 1 else: # 所有图片显示完后退出循环 running = False # 退出Pygame pygame.quit()
几个关键修改说明:
- 加入事件循环,处理窗口关闭事件,保证窗口能正常响应操作;
- 用
while循环配合time.sleep()控制每张图片的显示时长,让你能清晰看到每一张图; - 添加异常捕获,遇到路径错误的图片时会打印提示,不会直接崩掉程序;
- 每次绘制前填充背景,避免上一张图片的内容残留到下一张。
另外记得确认下result.csv里File列的路径,要和你的脚本运行目录对应上,比如图片在./car_images/文件夹里,那路径就得写成car_images/xxx.jpg这种格式哦。
内容的提问来源于stack exchange,提问作者nocturnal_study
相关产品推荐
相关产品推荐

