Печать всех событий Pygame в основной ленте tkinter - PullRequest
0 голосов
/ 23 мая 2018

Я хочу напечатать все события, которые происходят в моем приложении.Я использую Python 3 с Pygame, и я использую tkinter.

import pygame
from tkinter import *
from tkinter import ttk

def main():            

    root = Tk()
    app = soundscene(root)
    while True:
        for event in pygame.event.get():
           print (event)
    root.mainloop()


if __name__ == "__main__":
    main()

Этот код работает не так, как ожидалось, потому что циклы блокируются, что имеет смысл. Мой вопрос заключается в том, как сделать содержимое "пока истинным""часть цикла в Eventloop, поэтому он распечатывает все события Pygame?

1 Ответ

0 голосов
/ 23 мая 2018

Для получения событий Pygame окно / дисплей Pygame должно быть инициализировано.

"Очередь ввода сильно зависит от модуля дисплея Pygame. Если отображение не было инициализировано ирежим видео не установлен, очередь событий не будет работать ". Документация по событиям Pygame .

Однако, если вы хотите использовать tkinter с pygame, вы можете встроить окно pygame в окно tkinter.Это, однако, даст только события Pygame при использовании встроенного окна.Вот пример из другого вопроса :

import pygame
import tkinter as tk
from tkinter import *
import os

root = tk.Tk()
embed = tk.Frame(root, width = 500, height = 500) #creates embed frame    for pygame window
embed.grid(columnspan = (600), rowspan = 500) # Adds grid
embed.pack(side = LEFT) #packs window to the left
buttonwin = tk.Frame(root, width = 75, height = 500)
buttonwin.pack(side = LEFT)
os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
os.environ['SDL_VIDEODRIVER'] = 'windib'
screen = pygame.display.set_mode((500,500))
screen.fill(pygame.Color(255,255,255))
pygame.display.init()
pygame.display.update()

while True:
    for event in pygame.event.get():
        print(event)
    pygame.display.update()
    root.update()

Если вы ищете способ получения событий при использовании виджетов tkinter, вы можете настроить привязки в tkinter.Больше информации на этой ссылке

...