1+ # Imports 
2+ import  sys 
3+ import  pygame 
4+ 
5+ # Configuration 
6+ pygame .init ()
7+ fps  =  60 
8+ fpsClock  =  pygame .time .Clock ()
9+ width , height  =  640 , 480 
10+ screen  =  pygame .display .set_mode ((width , height ))
11+ 
12+ font  =  pygame .font .SysFont ('Arial' , 40 )
13+ 
14+ objects  =  []
15+ 
16+ class  Button ():
17+     def  __init__ (self , x , y , width , height , buttonText = 'Button' , onclickFunction = None , onePress = False ):
18+         self .x  =  x 
19+         self .y  =  y 
20+         self .width  =  width 
21+         self .height  =  height 
22+         self .onclickFunction  =  onclickFunction 
23+         self .onePress  =  onePress 
24+ 
25+         self .fillColors  =  {
26+             'normal' : '#ffffff' ,
27+             'hover' : '#666666' ,
28+             'pressed' : '#333333' ,
29+         }
30+ 
31+         self .buttonSurface  =  pygame .Surface ((self .width , self .height ))
32+         self .buttonRect  =  pygame .Rect (self .x , self .y , self .width , self .height )
33+ 
34+         self .buttonSurf  =  font .render (buttonText , True , (20 , 20 , 20 ))
35+ 
36+         self .alreadyPressed  =  False 
37+ 
38+         objects .append (self )
39+ 
40+     def  process (self ):
41+ 
42+         mousePos  =  pygame .mouse .get_pos ()
43+         
44+         self .buttonSurface .fill (self .fillColors ['normal' ])
45+         if  self .buttonRect .collidepoint (mousePos ):
46+             self .buttonSurface .fill (self .fillColors ['hover' ])
47+ 
48+             if  pygame .mouse .get_pressed (num_buttons = 3 )[0 ]:
49+                 self .buttonSurface .fill (self .fillColors ['pressed' ])
50+ 
51+                 if  self .onePress :
52+                     self .onclickFunction ()
53+ 
54+                 elif  not  self .alreadyPressed :
55+                     self .onclickFunction ()
56+                     self .alreadyPressed  =  True 
57+ 
58+             else :
59+                 self .alreadyPressed  =  False 
60+ 
61+         self .buttonSurface .blit (self .buttonSurf , [
62+             self .buttonRect .width / 2  -  self .buttonSurf .get_rect ().width / 2 ,
63+             self .buttonRect .height / 2  -  self .buttonSurf .get_rect ().height / 2 
64+         ])
65+         screen .blit (self .buttonSurface , self .buttonRect )
66+ 
67+ def  myFunction ():
68+     print ('Button Pressed' )
69+ 
70+ customButton  =  Button (30 , 30 , 400 , 100 , 'Button One (onePress)' , myFunction )
71+ customButton  =  Button (30 , 140 , 400 , 100 , 'Button Two (multiPress)' , myFunction , True )
72+ 
73+ # Game loop. 
74+ while  True :
75+     screen .fill ((20 , 20 , 20 ))
76+     for  event  in  pygame .event .get ():
77+         if  event .type  ==  pygame .QUIT :
78+             pygame .quit ()
79+             sys .exit ()
80+ 
81+     for  object  in  objects :
82+         object .process ()
83+ 
84+     pygame .display .flip ()
85+     fpsClock .tick (fps )
0 commit comments