To receive pygame events, a pygame window / display must be initialized.
"The input queue is heavily dependent on the pygame display module. If the display has not been initialized and a video mode not set, the event queue will not really work." Pygame event documentation.
However, if you do want to use tkinter with pygame, you can embed a pygame window into a tkinter window. This however will only give pygame events when using the embedded window. Here is an example from another question:
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()
If you are looking for a way to receive events when using tkinter widgets, you can setup bindings in tkinter. More information at this link