Pygame window 在点击之前运行正常,然后显示 "Not responding"
Pygame window runs fine until clicked on, then shows "Not responding"
先说几件事:
- 我用的是Windows10家庭版
- 我正在使用 Python 3.7
- 我正在使用 pygame 1.9.4
- 我的IDE是Visual Studio代码,以IDLE为备份
我目前正在使用 pygame 设计 GUI。注意:代码尚未完成。
当我在 VS Code 中 运行 调试会话时,它(大部分)按预期工作,但是当我尝试单击开始按钮时,pygame 没有响应并显示没有响应.
我在我制作的其他 pygame 脚本中也注意到了这一点,其中 pygame window 在单击或移动时冻结。
如有任何帮助,我们将不胜感激。
代码如下:
# Import modules
import sys, pygame, time, math
from time import sleep
from PIL import Image
# Display background image
image = 'asdf.png'
change = 2
img = Image.open('asdf.png')
width = img.width * change
height = img.height * change
print(width)
print(height)
screen = pygame.display.set_mode((width,height))
background = pygame.image.load(image).convert()
newscreen = pygame.transform.scale(background, (width, height))
screen.blit(newscreen, (0,0))
pygame.display.update()
# start button
pygame.draw.rect(newscreen, (255,120,0), pygame.Rect(width/4,height-height/4, width/2, height/7))
screen.blit(newscreen, (0,0))
pygame.display.update()
pygame.init()
myFont = pygame.font.SysFont("Times New Roman", 100)
text = myFont.render("START", False, (0, 0, 0))
screen.blit(text, (width/4+8,height-height/4-10))
pygame.display.update()
pygame.image.save(newscreen, 'background.png')
pygame.image.save(text, 'starttext.png')
# i button
pygame.draw.rect(newscreen, (255,0,120), pygame.Rect(width - 50, 10, 40,40))
screen.blit(newscreen,(0,0))
pygame.display.update()
myFont = pygame.font.SysFont("Times New Roman", 25)
ibutton = myFont.render("i", False, (0, 0, 0))
screen.blit(ibutton, (width-32,17))
pygame.display.update()
# Mouse click
while True:
left,right,center = pygame.mouse.get_pressed()
if left == True:
if event.type == MOUSEBUTTONUP:
x,y = pygame.mouse.get_pos()
if ((width/4) <= x <= ((width/4) + (width/2))) and ((height-height/4) <= y <= ((height-height/4) + height/76)):
#move to next screen
break
time.sleep(5)
这与链接的问题不相似,因为我的程序是用于 GUI 的,它需要鼠标单击事件。
Ted Klein Bergamn 的回答解释了为什么 window 变得无响应:
pygame.event.get
应该这样使用:
running = True
while running:
for event in pygame.event.get():
# This lets you quit by pressing the X button of the window.
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONUP:
if event.button == 1: # 1 = left mouse button, 2 = middle, 3 = right.
print('mouse up')
x,y = pygame.mouse.get_pos()
if ((width/4) <= x <= ((width/4) + (width/2))) and ((height-height/4) <= y <= ((height-height/4) + height/76)):
#move to next screen
running = False
在您的情况下(对于简单的 GUI 应用程序)pygame.event.wait
可能是一个不错的选择(它让程序在队列中没有事件时休眠)。
running = True
while running:
event = pygame.event.wait()
if event.type == pygame.MOUSEBUTTONUP:
if event.button == 1:
print('mouse up')
x,y = pygame.mouse.get_pos()
if ((width/4) <= x <= ((width/4) + (width/2))) and ((height-height/4) <= y <= ((height-height/4) + height/76)):
#move to next screen
running = False
先说几件事:
- 我用的是Windows10家庭版
- 我正在使用 Python 3.7
- 我正在使用 pygame 1.9.4
- 我的IDE是Visual Studio代码,以IDLE为备份
我目前正在使用 pygame 设计 GUI。注意:代码尚未完成。
当我在 VS Code 中 运行 调试会话时,它(大部分)按预期工作,但是当我尝试单击开始按钮时,pygame 没有响应并显示没有响应.
我在我制作的其他 pygame 脚本中也注意到了这一点,其中 pygame window 在单击或移动时冻结。
如有任何帮助,我们将不胜感激。
代码如下:
# Import modules
import sys, pygame, time, math
from time import sleep
from PIL import Image
# Display background image
image = 'asdf.png'
change = 2
img = Image.open('asdf.png')
width = img.width * change
height = img.height * change
print(width)
print(height)
screen = pygame.display.set_mode((width,height))
background = pygame.image.load(image).convert()
newscreen = pygame.transform.scale(background, (width, height))
screen.blit(newscreen, (0,0))
pygame.display.update()
# start button
pygame.draw.rect(newscreen, (255,120,0), pygame.Rect(width/4,height-height/4, width/2, height/7))
screen.blit(newscreen, (0,0))
pygame.display.update()
pygame.init()
myFont = pygame.font.SysFont("Times New Roman", 100)
text = myFont.render("START", False, (0, 0, 0))
screen.blit(text, (width/4+8,height-height/4-10))
pygame.display.update()
pygame.image.save(newscreen, 'background.png')
pygame.image.save(text, 'starttext.png')
# i button
pygame.draw.rect(newscreen, (255,0,120), pygame.Rect(width - 50, 10, 40,40))
screen.blit(newscreen,(0,0))
pygame.display.update()
myFont = pygame.font.SysFont("Times New Roman", 25)
ibutton = myFont.render("i", False, (0, 0, 0))
screen.blit(ibutton, (width-32,17))
pygame.display.update()
# Mouse click
while True:
left,right,center = pygame.mouse.get_pressed()
if left == True:
if event.type == MOUSEBUTTONUP:
x,y = pygame.mouse.get_pos()
if ((width/4) <= x <= ((width/4) + (width/2))) and ((height-height/4) <= y <= ((height-height/4) + height/76)):
#move to next screen
break
time.sleep(5)
这与链接的问题不相似,因为我的程序是用于 GUI 的,它需要鼠标单击事件。
Ted Klein Bergamn 的回答解释了为什么 window 变得无响应:
pygame.event.get
应该这样使用:
running = True
while running:
for event in pygame.event.get():
# This lets you quit by pressing the X button of the window.
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONUP:
if event.button == 1: # 1 = left mouse button, 2 = middle, 3 = right.
print('mouse up')
x,y = pygame.mouse.get_pos()
if ((width/4) <= x <= ((width/4) + (width/2))) and ((height-height/4) <= y <= ((height-height/4) + height/76)):
#move to next screen
running = False
在您的情况下(对于简单的 GUI 应用程序)pygame.event.wait
可能是一个不错的选择(它让程序在队列中没有事件时休眠)。
running = True
while running:
event = pygame.event.wait()
if event.type == pygame.MOUSEBUTTONUP:
if event.button == 1:
print('mouse up')
x,y = pygame.mouse.get_pos()
if ((width/4) <= x <= ((width/4) + (width/2))) and ((height-height/4) <= y <= ((height-height/4) + height/76)):
#move to next screen
running = False