If I were you, I would just rely on one USEREVENT type, to create as many as custom events I want. So, the way to achieve that is like append a special attribute for the name/type. Ok, a little bit example to make it clearer below...
Tested on pygame 1.9.6 on windows 10, python 3.7.3
import pygame as pg
ON_MY_MOUSE_CLICK = 1 # your own codes for your own events...
ON_MY_SCROLL = 2
BLAH_BLAH = 3
# etc ...
pg.init()
video = pg.display.set_mode((100,100))
MouseEvent = pg.event.Event(pg.USEREVENT, MyOwnType=ON_MY_MOUSE_CLICK )
ScrollEvent = pg.event.Event(pg.USEREVENT, MyOwnType=ON_MY_SCROLL)
blahblahEvent = pg.event.Event(pg.USEREVENT, MyOwnType=BLAH_BLAH)
pg.event.post(MouseEvent) # call your own type
pg.event.post(ScrollEvent) # call your own type
for event in pg.event.get():
if (event.type == pg.QUIT):
pass # your built-in event handle goes here
elif (event.type == pg.USEREVENT): # here we go
if (event.MyOwnType == ON_MY_MOUSE_CLICK):
print("My own mouse event!") # handle for your own event
elif (event.MyOwnType == ON_MY_SCROLL):
print("My own scroll event!") # handle for your own event
elif (event.MyOwnType == BLAH_BLAH):
print("My own blah blah event!") # handle for your own event
EDIT :
If you find yourself need to use pg.time.set_timer
, I know we can't assign the MyOwnType
to the set_timer
. However, you can freely use my set_interval.py
from my Github. It's under MIT, so you don't have to worry about general GNU license or something like that...
Here's the example:
from set_interval import setInterval
import pygame as pg
def set_timer(eventObj, interval):
func = lambda x: pg.event.post(x)
return setInterval(func=func, sec=interval, args=[eventObj])
ON_MY_MOUSE_CLICK = 1 # your own codes for your own events...
ON_MY_SCROLL = 2
BLAH_BLAH = 3
# etc ...
pg.init()
video = pg.display.set_mode((100,100))
MouseEvent = pg.event.Event(pg.USEREVENT, MyOwnType=ON_MY_MOUSE_CLICK )
ScrollEvent = pg.event.Event(pg.USEREVENT, MyOwnType=ON_MY_SCROLL)
blahblahEvent = pg.event.Event(pg.USEREVENT, MyOwnType=BLAH_BLAH)
# replacement for pygame.time.set_timer(MouseEvent, 1000)
myIntervalHandle1 = set_timer(MouseEvent, 1)
# replacement for pygame.time.set_timer(ScrollEvent, 2500)
myIntervalHandle2 = set_timer(ScrollEvent, 2.5)
running = True
while running :
for event in pg.event.get():
if (event.type == pg.QUIT):
pg.display.quit()
myIntervalHandle1.stop() # stop timer
myIntervalHandle2.stop() # stop timer
running = False
elif (event.type == pg.USEREVENT): # here we go
if (event.MyOwnType == ON_MY_MOUSE_CLICK):
print("My own mouse event!") # handle for your own event
elif (event.MyOwnType == ON_MY_SCROLL):
print("My own scroll event!") # handle for your own event
elif (event.MyOwnType == BLAH_BLAH):
print("My own blah blah event!") # handle for your own event
You can find the set_interval.py
here:
https://github.com/Hzzkygcs/setInterval-python