【发布时间】:2015-01-29 02:26:38
【问题描述】:
我正在使用 pygame 在我正在处理的项目中进行界面显示和控制器输入。目前一切运行良好,所以这不是主要问题,但如果在实际使用过程中意外发生,可能会出现一些问题,所以我想尽可能地修复它。
当我运行我的代码时,pygame 窗口会按预期出现、显示和更新。但是,如果我单击它或它以其他方式获得焦点,窗口将冻结并变为(无响应)。代码本身继续运行,包括负责更新显示的线程,直到我关闭窗口,所以 Python 本身仍然运行良好,但窗口停止工作。
我的更新循环代码在这里,非常丑陋:
while(1):
print "thread is fine"
pygame.event.pump()
if LOV_Flag == 1:
videoColor = (255, 0, 0)
else:
videoColor = (0, 255, 0)
# Refresh the screen and redraw components
screen.fill((255, 255, 255))
pulseLabel = pulseFont.render("Pulse: ", 1, (0, 0, 0))
videoLabel = videoFont.render("Video: ", 1, (0, 0, 0))
motorsLabel = labelFont.render("Motors", 1, (0, 0, 0))
motorLabel = captionFont.render("L R", 1, (0, 0, 0))
armLabel = captionFont.render("Arm", 1, (0, 0, 0))
gripperLabel = captionFont.render("Gripper", 1, (0, 0, 0))
screen.blit(motorsLabel, (55, 50))
screen.blit(motorLabel, (60, 75))
screen.blit(pulseLabel, (300, 19))
screen.blit(videoLabel, (300, 45))
screen.blit(armLabel, (250, 75))
screen.blit(gripperLabel, (235, 255))
leftBar = (50, 200 - drive.getSpeed()[0], 25, drive.getSpeed()[0])
rightBar = (100, 200 - drive.getSpeed()[1], 25, drive.getSpeed()[1])
armBar = (250, 200 - (100 * arm.report()), 25, (100 * arm.report()))
upperArmBar = (250, 200 - (100 * arm.reportUp()), 25, 2) # 100 is the value on the bar
lowerArmBar = (250, 200 - (100 * arm.reportDown()), 25, 2) # 135 (65) is the value on the bar
gripperBar = (212, 225, (100 * hand.report()), 25)
leftGripperBar = (212 + (100 * hand.reportClosed()), 225, 2, 25)
rightGripperBar = (212 + (100 * hand.reportOpen()), 225, 2, 25)
pygame.draw.rect(screen, (255, 0, 0), leftBar, 0)
pygame.draw.rect(screen, (255, 0, 0), rightBar, 0)
pygame.draw.rect(screen, (255, 0, 0), armBar, 0)
pygame.draw.rect(screen, (0, 0, 0), upperArmBar, 0)
pygame.draw.rect(screen, (0, 0, 0), lowerArmBar, 0)
pygame.draw.rect(screen, (255, 0, 0), gripperBar, 0)
pygame.draw.rect(screen, (0, 0, 0), leftGripperBar, 0)
pygame.draw.rect(screen, (0, 0, 0), rightGripperBar, 0)
pygame.draw.circle(screen, pulseColor, [370, 32], 10)
pygame.draw.circle(screen, videoColor, [370, 58], 10)
pygame.display.update()
time.sleep(0.1)
if killFlag:
return
image 用于了解窗口的外观,以帮助您更好地理解代码。
【问题讨论】:
-
将
time.sleep(0.1)更改为pygame.time.sleep(100)。如果还有问题,请告诉我。 -
摆脱
return。没有功能。 -
pygame.time.sleep(100)导致错误“'module' object has no attribute 'sleep'”,return 用于退出线程的 run() 函数。我可能有返回的替代方案,但是有一个函数(只是未显示)返回可以退出。 -
我的意思是
pygame.time.delay(100)。