loop.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. import math
  2. import random
  3. import time
  4. import os
  5. START = time.time()
  6. _START = time.time()
  7. from optparse import OptionParser
  8. ...
  9. parser = OptionParser()
  10. parser.add_option("-m", "--mode", dest="mode",
  11. help="pixel mode") #, metavar="FILE")
  12. parser.add_option("-X", "--XX", dest="XX", #default=1,
  13. help="x-split") #, metavar="FILE")
  14. parser.add_option("-x", "--xx", dest="xsplit", #default=1,
  15. help="x-split") #, metavar="FILE")
  16. parser.add_option("-y", "--yy", dest="ysplit",#default=1,
  17. help="y-split") #, metavar="FILE")
  18. parser.add_option("-s", "--start-univ", dest="start_univ",#default=1,
  19. help="set start-univers default=2") #, metavar="FILE")
  20. parser.add_option("-g", "--gobo-ch", dest="gobo_ch",#default=1,
  21. help="gobo ch univ on 1") #, metavar="FILE")
  22. #parser.add_option("-f", "--file", dest="filename",
  23. # help="write report to FILE", metavar="FILE")
  24. #parser.add_option("-q", "--quiet",
  25. # action="store_false", dest="verbose", default=True,
  26. # help="don't print status messages to stdout")
  27. (options, args) = parser.parse_args()
  28. # ===== GUI =========
  29. import pygame
  30. import pygame.gfxdraw
  31. import pygame.font
  32. os.environ['SDL_VIDEO_WINDOW_POS'] = '%i,%i' % (200,164)
  33. os.environ['SDL_VIDEO_CENTERED'] = '0'
  34. pg = pygame
  35. pygame.init()
  36. pygame.mixer.quit()
  37. f = pygame.font.get_fonts()
  38. for i in f:
  39. if "mono" in i.lower():
  40. print(i)
  41. font0 = pygame.font.SysFont("FreeSans",10)
  42. font = pygame.font.SysFont("freemonobold",22)
  43. font10 = pygame.font.SysFont("freemonobold",10)
  44. font12 = pygame.font.SysFont("freemonobold",12)
  45. font15 = pygame.font.SysFont("freemonobold",15)
  46. #font = pygame.font.SysFont(None,30)
  47. fr = font.render("hallo" ,1, (200,0,255))
  48. class Layout():
  49. def __init__(self,master):
  50. self.master = master
  51. def pack(self,**args):
  52. pass
  53. def grid(self,**args):
  54. pass
  55. def bind(self,**args):
  56. pass
  57. class Button():
  58. def __init__(self,window,pos):
  59. self.window = window
  60. self.event_pos = [0,0]
  61. self.w = 20
  62. self.h = 10
  63. self.pos = pos
  64. self.bd = [0,255,0]
  65. self.rgb = (0xaa,0xaa,0xaa,127)
  66. self.__layout = Layout(self)
  67. self.pack = self.__layout.pack
  68. self.grid = self.__layout.grid
  69. self.bind = self.__layout.bind
  70. self.motion = 0
  71. def draw(self):
  72. #pos = [160,100,70,60]
  73. #rgb = (0xdd,0xdd,0xdd,0)
  74. #rgb = (0xaa,0xaa,0xaa,0)
  75. pos = self.pos
  76. rgb = self.rgb
  77. window.set_alpha(128)
  78. pygame.draw.rect(self.window,rgb,pos)
  79. fr = font0.render("GOBO-123" ,1, (0,0,0))
  80. #fr = font.render("You win!", True, BLACK)
  81. #text_rect = fr.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
  82. self.window.blit(fr,(pos[0]+4,pos[1]+4))
  83. self._check_event()
  84. self._draw_bd(delta=-1)
  85. self._draw_bd(delta=-2,highlight=1,color=self.bd)
  86. def _check_event(self):
  87. self.bd = [0,255,0]
  88. self.motion = 0
  89. if self.event_pos[0] < self.pos[0]+1:
  90. return #continue
  91. if self.event_pos[0] > self.pos[0]+self.pos[2]-1:
  92. return #continue
  93. if self.event_pos[1] < self.pos[1]+1:
  94. return #continue
  95. if self.event_pos[1] > self.pos[1]+self.pos[3]-1:
  96. return #continue
  97. #print(">>",self.event_pos)
  98. self.bd = [255,0,0]
  99. self.motion = 1
  100. def _draw_bd(self,delta=0,highlight=0,color=[0,0,0]):
  101. pos = self.pos
  102. d = delta
  103. xpos = (
  104. (pos[0]-d ,pos[1]-d),
  105. (pos[0]+pos[2]+d-1 ,pos[1]-d),
  106. (pos[0]+pos[2]+d-1 ,pos[1]+pos[3]+d-1),
  107. (pos[0]-d ,pos[1]+pos[3]+d-1)
  108. )
  109. i_old = None
  110. ypos = []
  111. for i in xpos:
  112. if i_old:
  113. ypos.append( (i_old,i) )
  114. i_old = i
  115. ypos.append( (i_old,xpos[0]) )
  116. for i in ypos:
  117. #print("ypos",i)
  118. pygame.draw.aaline(window,color,i[0],i[1],1)
  119. def event(self,event=None):
  120. #print(self.pos)
  121. if "pos" in event.dict:
  122. self.event_pos = event.pos
  123. self._check_event()
  124. if self.motion:
  125. #print(self,"Motion.event",event)
  126. if "button" in event.dict:
  127. print("-",self,"Button.event",event)
  128. main_size=(600,500)
  129. window = pygame.display.set_mode(main_size,pg.RESIZABLE,32)#,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  130. pg.display.set_caption('NEXTGEN GUI')
  131. class Gevent():
  132. def __init__(self):
  133. self.drag = 0
  134. self.pos1 = [0,0]
  135. self.pos2 = [0,0]
  136. self.event_pos = [0,0]
  137. self.gain = 0
  138. def draw(self,delta=0,highlight=0,color=[0,255,0]):
  139. if self.pos1 == [0,0]:
  140. return
  141. if self.pos2 == [0,0]:
  142. return
  143. pos1 = [self.pos1[0],self.pos1[1]]
  144. pos2 = [self.pos2[0],self.pos2[1]]
  145. #pygame.draw.aaline(window,color,pos1,pos2,1)
  146. color = [200,0,0,127]
  147. # h unten
  148. pos1 = [self.pos1[0],self.pos2[1]]
  149. pos2 = [self.pos2[0],self.pos2[1]]
  150. pygame.draw.aaline(window,color,pos1,pos2,1)
  151. color = [200,200,0,127]
  152. # h rechts
  153. pos1 = [self.pos2[0],self.pos1[1]]
  154. pos2 = [self.pos2[0],self.pos2[1]]
  155. pygame.draw.aaline(window,color,pos1,pos2,1)
  156. color = [0,200,0,127]
  157. # h links
  158. pos1 = [self.pos1[0],self.pos1[1]]
  159. pos2 = [self.pos1[0],self.pos2[1]]
  160. pygame.draw.aaline(window,color,pos1,pos2,1)
  161. # h oben
  162. pos1 = [self.pos1[0],self.pos1[1]]
  163. pos2 = [self.pos2[0],self.pos1[1]]
  164. pygame.draw.aaline(window,color,pos1,pos2,1)
  165. def event(self,event):
  166. print("GLOBAL",self,self.event_pos,event)
  167. if event.type == pygame.QUIT:
  168. pygame.quit()
  169. sys.exit(0)
  170. elif event.type == pygame.VIDEORESIZE:
  171. scrsize = event.size
  172. width = event.w
  173. hight = event.h
  174. screen = pygame.display.set_mode(scrsize,pg.RESIZABLE)
  175. changed = True
  176. if "pos" in event.dict:
  177. self.event_pos = event.pos
  178. #self._check_event()
  179. if "button" in event.dict:
  180. self.pos1 = self.event_pos
  181. if "buttons" in event.dict:
  182. if event.buttons[0] == 1:
  183. self.pos2 = self.event_pos
  184. self.drag = 1
  185. else:
  186. self.pos1 = [0,0]
  187. self.pos2 = [0,0]
  188. self.drag = 0
  189. if "gain" in event.dict:
  190. self.gain = event.gain
  191. global_event = Gevent()
  192. def main():
  193. START = time.time()
  194. running = 1
  195. frame = 0
  196. fps = 0
  197. b0 = Button(window,pos=[80,80,50,40])
  198. b1 = Button(window,pos=[100,100,60,40])
  199. b2 = Button(window,pos=[200,200,60,40])
  200. b2a = Button(window,pos=[260,200,60,40])
  201. b3 = Button(window,pos=[1500,800,60,40])
  202. while running:
  203. pygame.display.flip()
  204. #event()
  205. pos = [160,10,70,60]
  206. rgb = (0xdd,0xdd,0xdd,0)
  207. rgb = (0xaa,0xaa,0xaa,0)
  208. window.fill((0,0,0))
  209. fr = font15.render("{}".format(pos[1]) ,1, (200,200,200))
  210. window.blit(fr,(10,pos[1] ))
  211. fr = font15.render("{}".format(fps) ,1, (200,200,200))
  212. window.blit(fr,(30,pos[1] ))
  213. fr = font15.render("{}".format(frame) ,1, (200,200,200))
  214. window.blit(fr,(60,pos[1] ))
  215. fr = font15.render("{:03}".format(int((START+1-time.time())*100)) ,1, (200,200,200))
  216. window.blit(fr,(80,pos[1] ))
  217. #print(window,rgb,pos)
  218. #pygame.draw.rect(window,rgb,pos)
  219. #pygame.draw.rect(window,(255,0,0),(15,15,20,10))
  220. for event in pygame.event.get():
  221. global_event.event(event)
  222. b0.event(event)
  223. b1.event(event)
  224. b2.event(event)
  225. b2a.event(event)
  226. b3.event(event)
  227. c = (200,200,200)
  228. if global_event.gain:
  229. c = (0,255,0)
  230. fr = font15.render("{:03}/{:03}".format(global_event.event_pos[0],global_event.event_pos[1]) ,1, c)
  231. window.blit(fr,(120,pos[1] ))
  232. b0.draw()
  233. b1.draw()
  234. b2.draw()
  235. b2a.draw()
  236. b3.draw()
  237. global_event.draw()
  238. pygame.display.flip()
  239. pg.time.wait(30)
  240. pg.time.wait(30)
  241. frame += 1
  242. if START+1 < time.time():
  243. fps = frame
  244. frame = 0
  245. START = time.time()
  246. if __name__ == "__main__":
  247. main()