'Pygame - window opens but fill() doesn't work and no events detected

I'm creating a simple pygame program (PyGame 1.9.6 on Python 3.7), but some of the code inside my while loop doesn't seem to work. When I run the program, the window opens, but the screen doesn't fill with black, nor does the window close when I press "x"

import pygame


# pygame setup
pygame.init()

# Open a window on the screen
width, height = 600, 600
screen = pygame.display.set_mode((width, height))

def main():
    running = True
    clock = pygame.time.Clock()
    BLACK = (0,0,0)
    while running:
        clock.tick(5) # number of loops per second
        print("tick")
        screen.fill(BLACK)

        for event in pygame.event.get():
            print("event detected")

            if event == pygame.QUIT:
                running = False

        pygame.display.update()


main()

In the console, "tick" appears like normal and "event detected" appears after pressing any keys or mouse click. I don't get any errors when I run it.



Solution 1:[1]

Just as @Telan said

if event==pygame.QUIT:

should be

if event.type==pygame.QUIT:

However to properly shutdown pygame, pygame.quit() is important to shutdown pygame modules which is the reverse of pygame.init()

While sys.exit() is used to properly shutdown the main python program.

from sys import exit
import pygame

if event.type == pygame.QUIT:
    pygame.quit()
    exit()

Full code is shown below. Enjoy!

import pygame
from sys import exit

# pygame setup
pygame.init()

# Open a window on the screen
width, height = 600, 600
screen = pygame.display.set_mode((width, height))


def main():
    clock = pygame.time.Clock()
    BLACK = (0, 0, 0)
    while True:
        clock.tick(5)  # number of loops per second
        print("tick")
        screen.fill(BLACK)

        for event in pygame.event.get():
            print("event detected")

            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
                

        pygame.display.update()


if __name__ == "__main__":
    main()

Solution 2:[2]

You can split the text by whitespace and check if all words are contained with Array#every in conjunction with Array#includes.

let search = document.querySelector("input");
search.addEventListener("input", function() {
  let s = search.value.split(/\s+/);
  for (let e of search.nextElementSibling.children) {
    let words = e.textContent.split(/\s+/);
    if (!s.every(x => words.includes(x))) {
      e.style.display = "none";
    } else {
      e.style.display = "block";
    }
  }
});
<input type="search">
<div>
  <p>This is the first string.</p>
  <p>This is the second string.</p>
  <p>This is the third string.</p>
</div>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Knn_Zero
Solution 2 Unmitigated