Как я могу закрыть pygames, не закрывая tkinter? - PullRequest
0 голосов
/ 13 мая 2011

Так что я пытаюсь использовать Tkinter для получения ввода текста, а затем запустить Pygames из этого, чтобы сделать анимацию. Я получаю сообщение об ошибке при закрытии Pygames.

Упрощенная версия того, как я планирую использовать Pygames:

def the_program():
    if spot.get().strip() == "":
        tkMessageBox.showerror("X", "Y")
    else:
        code = spot.get().strip()
        pygame.init()
        pygame.display.set_caption('X')
        windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
            pygame.display.update()

Запуск Ткинтера:

root = Tk()
frame = Frame(root)
text = Label(frame, text='X')
spot = Entry(frame)
button = Button(frame, text = 'Ready?', command = the_program) "Starts Pygames"
frame.pack()
text.pack()
spot.pack()
button.pack()

root.mainloop()

Pygames открывается нормально и работает нормально, но когда я закрываю его, я получаю эту ошибку:

Traceback (most recent call last):
  File "C:\Python26\Practice\legit Battle Master.py", line 82, in <module>
    root.mainloop()
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1017, in mainloop
    self.tk.mainloop(n)
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1412, in __call__
    raise SystemExit, msg

Как я могу избежать этого? Я попытался удалить "sys.exit ()", но Python падает.

1 Ответ

0 голосов
/ 13 мая 2011

Вы пытаетесь выйти из основного цикла pygame с помощью sys.exit(), который закрывает все запущенное приложение, включая графический интерфейс пользователя tkinter, который вы запустили до pygame. Вы должны выйти из основного цикла pygame (единственное предложение while) с условным условием. например:

running = True
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            running = False
...
...