всплывающее окно в Tkinter с Pygame, который делает go прочь, если не закрыть / нажать ОК - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь получить всплывающее окно для моего экрана pygame, используя tkinter, но я просто хочу простое окно сообщения, которое я передаю в сообщении, и тип сообщения (например: «ошибка»). Чего я не знаю, как это сделать, так это сделать так, чтобы они не могли не отвечать на него, если они щелкают где-то еще, это не позволит пользователю ничего сделать, пока он не ответит, даже go для настольного компьютера. вещь.

что у меня есть до сих пор:

def popUp(self, message, messagetype='Error'):

    #Tk().wm_withdraw() #to hide the main window

    messagebox.showinfo(messagetype, message)

1 Ответ

0 голосов
/ 02 мая 2020

Чтобы это работало, mainl oop вашей игры должен быть в функции (назовем это play). Допустим, у вас очень простой код.

Когда условие выполнено, вы можете получить доступ к новой функции popUp. Который может иметь ваше окно tkinter. Когда кнопка нажата, ее команда может быть ...command=play), если игрок хочет перезагрузить. Так как функция popUp не находится внутри mainl oop, игра не будет отвечать на запросы. Пример:

    def play():
        while carryOn:
                for event in pygame.event.get():
                    if event.type==pygame.QUIT:
                        carryOn=False

                #Checking if a key is pressed and then responding e=with function in the sprite class
                keys = pygame.key.get_pressed()
                if keys[pygame.K_LEFT]:
                    player.moveLeft(5)
                if keys[pygame.K_RIGHT]:
                    player.moveRight(5)
                if keys[pygame.K_UP]:
                    player.moveUp(5)
                if keys[pygame.K_DOWN]:
                    player.moveDown(5)
                if keys[pygame.K_a]:
                    player.moveLeft(5)
                if keys[pygame.K_d]:
                    player.moveRight(5)
                if keys[pygame.K_w]:
                    player.moveUp(5)
                if keys[pygame.K_s]:
                    player.moveDown(5)
                #yourcondition
#               if ... :
#                   carryOn = False
#                   popUp()

                #Game Logic
                all_sprites_list.update()

                #Setting the background
                screen.fill(GREEN)

                #Now let's draw all the sprites
                all_sprites_list.draw(screen)

                #Refresh Screen
                pygame.display.flip()

                #Number of frames per second 
                clock.tick(60)

Это не полный код - отсутствующий класс спрайта и код перед этим. После этого вы можете получить окно tkinter (после импорта tkinter), например:

global window #so it can be destroyed in the other function
window = Tk()
#message = ...
#message.grid ...
button = Button(window, text="restart", width=5, command=play)
button.grid # where you want it

Игра будет заморожена до тех пор, пока пользователь не нажмет перезапуск (вы также можете захотеть где-то в своем коде window .destroy(). это в значительной степени все, что вы хотите, но это не близко к завершению кода. Я надеюсь, что это было полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...