#python #pygame
#python #pygame
Вопрос:
У меня есть некоторый код для окна pygame:
while True:
try:
gameDisplay.fill(white)
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
except Exception:
pass
a=button("Enter",100,150,100,50,darkgreen,green,"play")
button("Exit",450,150,100,50,darkred,red,"quit")
for event in pygame.event.get() :
if event.type == pygame.QUIT :
pygame.quit()
pygame.display.update()
#if a == False:
#pygame.quit()
он отображает 2 кнопки (созданные функцией button), на которые можно нажать. При нажатии на зеленую кнопку появляется окно ввода tkinter. После того, как пользователь вводит необходимые данные и входные данные подтверждены, функция возвращает состояние (если пользователь правильно ввел данные false). После того, как это произойдет, я хочу изменить то, что отображается в окне, и показать что-то совершенно другое. Первоначальная цель «a» (состояние) состояла в том, чтобы закрыть окно и открыть новое окно после проверки входных данных, однако после исследования я обнаружил, что вы не можете открыть два окна в одном скрипте.
Я пробовал это:
if a == False:
gameDisplay.fill(white)
gameDisplay.blit(image1, (50, 0))
gameDisplay.blit(image2, (50, 100))
gameDisplay.blit(image3, (50, 200))
gameDisplay.blit(image4, (50, 300))
gameDisplay.blit(image5, (120, 100))
gameDisplay.blit(image6, (120, 200))
gameDisplay.blit(image7, (130, 260))
gameDisplay.blit(image8, (130, 290))
gameDisplay.blit(image9, (130, 320))
gameDisplay.blit(text, (0,0))
gameDisplay.blit(text2, (200,385))
gameDisplay.blit(text3, (200,369))
gameDisplay.blit(text4, (300,25))
gameDisplay.blit(text5, (300,100))
gameDisplay.blit(image16, (300, 45))
gameDisplay.blit(image17, (350, 45))
gameDisplay.blit(text6, (300, 170))
gameDisplay.blit(image10, (300, 120))
gameDisplay.blit(image11, (350, 120))
gameDisplay.blit(image12, (400, 120))
gameDisplay.blit(image13, (450, 120))
gameDisplay.blit(image14, (500, 120))
gameDisplay.blit(image15, (550, 120))
gameDisplay.blit(image19, (300, 190))
gameDisplay.blit(image20, (350, 190))
pygame.display.update()
и разместил его после функции второй кнопки, но не сработал. Есть идеи?
Комментарии:
1. Программа неправильно отформатирована в отношении отступа. Похоже, что вы воссоздаете кнопки на каждой итерации основного цикла, что, вероятно, тоже неверно.
2. @RufusVS это было именно так, как я вставил код. Я исправил это сейчас
Ответ №1:
Для Pygame старайтесь оставаться в одном цикле. В зависимости от условия, покажите кнопки или сыграйте в игру.
Попробуйте этот код:
a = True # show buttons
while True:
try:
gameDisplay.fill(white)
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
except Exception:
pass
if a == True: # keep showing buttons until user clicks one
a=button("Enter",100,150,100,50,darkgreen,green,"play")
button("Exit",450,150,100,50,darkred,red,"quit")
if a == False: # run game
gameDisplay.fill(white)
gameDisplay.blit(image1, (50, 0))
...........
gameDisplay.blit(image19, (300, 190))
gameDisplay.blit(image20, (350, 190))
for event in pygame.event.get() :
if event.type == pygame.QUIT :
pygame.quit()
pygame.display.update()
#if a == False:
#pygame.quit()
pygame.display.update()
Комментарии:
1. Это работает, однако новое содержимое отображается только в течение половины секунды, прежде чем переключиться обратно на кнопки. Я поставил «a = True» вне цикла while, и это сработало