Exemple #1
0
    def plot_spectra(self):
        # calculate scale and axis label steps:
        scale_x = (688.0 - 2 * self.x_offset) / (self.x_max - self.x_min)
        scale_y = (688.0 - 2 * self.y_offset) / (self.y_max - self.y_min)
        step_x = scale_x * (self.x_max - self.x_min) / 10
        step_y = scale_y * (self.y_max - self.y_min) / 10

        # Draw x and y axix:
        canvas.set_stroke_color(0, 0, 0)
        # x-axis
        canvas.draw_line(self.x_offset, self.y_offset, 688, self.y_offset)
        # y-axis
        canvas.draw_line(self.x_offset, self.y_offset, self.x_offset, 688)

        # label and mark the axes..
        for i in range(11):
            canvas.set_fill_color(0, 0, 0)
            # x-axis...
            label = self.x_axis_format.format(self.x_min + i *
                                              (self.x_max - self.x_min) / 10)
            canvas.draw_text(label,
                             self.x_offset + step_x * i,
                             0,
                             font_name='Helvetica',
                             font_size=16)
            canvas.draw_line(self.x_offset + step_x * i, self.y_offset - 5,
                             self.x_offset + step_x * i, self.y_offset)

            # y-axis...
            label = self.y_axis_format.format(self.y_min + i *
                                              (self.y_max - self.y_min) / 10)
            canvas.draw_text(label,
                             0,
                             self.y_offset + step_y * i,
                             font_name='Helvetica',
                             font_size=16)
            canvas.draw_line(self.x_offset - 5, self.y_offset + step_y * i,
                             self.x_offset, self.y_offset + step_y * i)

        # draw each dataset...
        for j in range(len(self.x_set)):
            temp_x = []
            temp_y = []
            temp_colour = []
            temp_x = self.x_set[j]
            temp_y = self.y_set[j]

            canvas.set_stroke_color(*self.spectrum_colour[j])
            canvas.set_line_width(2)
            canvas.move_to(self.x_offset + scale_x * (temp_x[0] - self.x_min),
                           self.y_offset + scale_y * (temp_y[0] - self.y_min))

            for i in range(len(temp_x)):
                draw_x = self.x_offset + scale_x * (temp_x[i] - self.x_min)
                draw_y = self.y_offset + scale_y * (temp_y[i] - self.y_min)
                if (self.style[j] == '-'):
                    canvas.add_line(draw_x, draw_y)
                if (self.style[j] == 'o'):
                    canvas.add_ellipse(draw_x - 3, draw_y - 3, 6, 6)
            canvas.draw_path()
Exemple #2
0
def dessine(mot,p,e):
  global to_find
  for i in range(len(mot)):
    if mot[i] in to_find:
      canvas.draw_line((i+1)*e+(i)*p,60,(i+1)*(e+p),60)
    else:
      a = (i+1)*e+(i)*p
      b = (i+1)*(e+p)
      canvas.draw_text( (a+b)/2 , 50 , mot[i])
Exemple #3
0
def drawNumbers2():
	for i in range(12):
		canvas.save_gstate()
		canvas.translate(centerX, centerY)
		canvas.rotate(-2 * pi / 12.0 * i)
		canvas.set_fill_color(0.3, 0.3, 0.3, 0.6)
		fontSize = 30
		fontName = 'Helvetica-Bold'
		number = str(12 if i == 0 else i)
		width, height = canvas.get_text_size(number, fontName, fontSize)
		canvas.draw_text(number, -width/2, 115, fontName, fontSize)
		canvas.restore_gstate()
Exemple #4
0
def drawNumbers():
	for i in range(12):
		canvas.save_gstate()
		canvas.set_fill_color(0.3, 0.3, 0.3, 0.6)
		fontSize = 30
		fontName = 'Helvetica-Bold'
		number = str(12 if i == 0 else i)
		width, height = canvas.get_text_size(number, fontName, fontSize)
		hour = i
		angle = -2 * pi / 12.0 * (hour - 3)
		length = clockWidth * 0.43
		rads = radians(angle)
		x = int(cos(angle) * length) + centerX
		y = int(sin(angle) * length) + centerY
		canvas.draw_text(number, x - width/2, y - height/2, fontName, fontSize)
		canvas.restore_gstate()
Exemple #5
0
    def render(self):
        self.time += 1
        canvas.clear()
        canvas.draw_image(images[self.fond.name], self.fond.center, self.fond.size, (470, 150), self.fond.size2, 0)
        canvas.draw_image(
            images[self.ball.info.name],
            self.ball.info.center,
            self.ball.info.size,
            self.ball.pos,
            self.ball.info.size2,
            self.ball.angle,
        )
        canvas.draw_line((500, 146), (400, 146), 3, "Red")
        canvas.draw_text("Score: " + str(self.ball.get_score()), (370, 46), 30, "Orange")
        c = self.get_kb()
        if c == "38":
            self.ball.shooting = True
            self.ball.shoot()
        if c == None:
            self.ball.shooting = False

        self.ball.update()
def render():
  global jeu, count, partie, timer
  canvas.clear()
  
  canvas.draw_image(echiquier, (175,171),(350,342),(250,250),(500,500),0)
 
  board = str(jeu.board).split()
 
  j = 0
  for ligne in board:
    i = 0
    for c in ligne:
      i += 1
      if c<> ".":
        x = ML+i*(W-2*ML)/8 - 25
        y = MT+j*(W-2*MT)/8 + 12
        p = pieces[c]
        
        canvas.draw_image(pions,
                         (
						 pions_center[0]+p[1]*pions_size[0],
                         pions_center[1]+p[0]*pions_size[1]),
                         pions_size,
                         (x,y),
                         pions_size2,
                         0
        )
    j += 1  
  
  
  
  if count < len(partie):
    canvas.draw_text(partie[count],(20,20),24,'Blue')
    jeu.move(partie[count])
    jeu.advance()
  
  count += 1
def draw():
  
  global bits, out
  canvas.fill_rect(0,0,500,500)
  left = 80
  top = 30
  canvas.draw_line((0,30+top),(500,30+top),4,'Blue')  
  cl2 = 'Yellow'
  
  canvas.draw_text("ENTREES",(left-30,25+top),24,cl2)
  canvas.draw_text("SORTIES",(left+250,25+top),24,cl2)
  canvas.draw_circle((left, 50+top), 10, 2, 'Blue', color(str(bits['A'])))
  canvas.draw_circle((left, 73+top), 10, 2, 'Blue', color(str(bits['B'])))
  canvas.draw_circle((left, 96+top), 10, 2, 'Blue', color(str(bits['C'])))

  canvas.draw_circle((left+170, 50+top), 10, 2, 'Blue', color(out))
  
  canvas.draw_text("A: "+str(bits['A']),(left+15,58+top),24,cl2)
  canvas.draw_text("B: "+str(bits['B']),(left+15,80+top),24,cl2)
  canvas.draw_text("C: "+str(bits['C']),(left+15,102+top),24,cl2)
  canvas.draw_text(inp.get_text(),(left+185,58+top),24,cl2)
  
  """
  A FAIRE:
  
  Dessiner avec draw_circle et draw_line les interrupteurs
  et les faire basculer et eteindre quand les entrees changent
  
  """
  #dessin des fils
  canvas.draw_line((0,290+top),(100,290+top),3,'Blue')
  canvas.draw_line((150,290+top),(200,290+top),3,'Blue')
  canvas.draw_line((200,230+top),(200,350+top),3,'Blue')
  canvas.draw_line((200,230+top),(250,230+top),3,'Blue')
  canvas.draw_line((200,350+top),(250,350+top),3,'Blue')
  canvas.draw_line((300,230+top),(350,230+top),3,'Red')
  canvas.draw_line((300,350+top),(350,350+top),3,'Red')
  canvas.draw_line((350,230+top),(350,350+top),3,'Red')
  canvas.draw_line((500,290+top),(350,290+top),3,'Red') 
  canvas.draw_circle((420, 290+top), 30, 2, 'Blue', color(out))
  
  canvas.draw_text("A",(115,270+top),24,cl2)
  canvas.draw_text("B",(267,210+top),24,cl2)
  canvas.draw_text("C",(267,330+top),24,cl2)
  #dessin des interrupteurs
  
  if bits['C'] == 0:
    canvas.draw_line((250,350+top),(300,350+top),3,'Orange')
  else:
    canvas.draw_line((250,350+top),(300,330+top),3,'Orange')
def draw():
  #ceci est la fonction qui gere l'ecran
  global bits
  canvas.fill_rect(0,0,500,500)
  left = 80
  top = 30
  canvas.draw_line((0,30+top),(500,30+top),4,'Blue')  
  cl2 = 'Yellow'
  
  canvas.draw_text("ENTREES",(left-30,25+top),24,cl2)
  canvas.draw_text("SORTIES",(left+250,25+top),24,cl2)
  if (bits['A']+bits['B'] >= 1):
    equ = 1
  else:
    equ = 0
  canvas.draw_circle((left, 50+top), 10, 2, 'Blue', color(str(bits['A'])))
  canvas.draw_circle((left, 80+top), 10, 2, 'Blue', color(str(bits['B'])))
 
  canvas.draw_circle((left+250, 50+top), 10, 2, 'Blue', color(str(equ)))
  
  canvas.draw_text("A: "+str(bits['A']),(left+15,58+top),24,cl2)
  canvas.draw_text("B: "+str(bits['B']),(left+15,88+top),24,cl2)
  canvas.draw_text("L: "+str(equ),(left+265,58+top),24,cl2)
 
  canvas.draw_line((0,290+top),(100,290+top),3,'Red')
  canvas.draw_line((150,350+top),(200,350+top),3,'Blue')
  canvas.draw_line((50,350+top),(100,350+top),3,'Red')
  canvas.draw_line((50,350+top),(50,290+top),3,'Red')
  canvas.draw_line((200,350+top),(200,290+top),3,'Blue')
  canvas.draw_line((500,290+top),(150,290+top),3,'Blue') 
  
  canvas.draw_circle((420, 290+top), 30, 2, 'Blue', color(str(equ)))
  
  canvas.draw_text("A",(115,270+top),24,cl2)
  canvas.draw_text("B",(115,320+top),24,cl2)
  canvas.draw_text("L",(410,240+top),24,cl2)
  
  if bits['A'] == 0:
    canvas.draw_line((100,290+top),(150,270+top),3,'Orange')
  else:
    canvas.draw_line((100,290+top),(150,290+top),3,'Orange')
    
  if bits['B'] == 0:
    canvas.draw_line((100,350+top),(150,330+top),3,'Orange')
  else:
    canvas.draw_line((100,350+top),(150,350+top),3,'Orange')
  
  """
def draw(mycanvas):
  #ceci est la fonction qui gere l'ecran
  global bits
  left = 80
  top = 30
  canvas.draw_line((0,30+top),(500,30+top),4,'Blue')  
  cl2 = 'Yellow'
  
  canvas.draw_text("ENTREES",(left-30,25+top),24,cl2)
  canvas.draw_text("SORTIES",(left+250,25+top),24,cl2)
  canvas.draw_circle((left, 50+top), 10, 2, 'Blue', color(str(bits['A'])))
 
  canvas.draw_circle((left+250, 50+top), 10, 2, 'Blue', color(str(bits['A'])))
  
  canvas.draw_text("A: "+str(bits['A']),(left+15,58+top),24,cl2)
  canvas.draw_text("L: "+str(bits['A']),(left+265,58+top),24,cl2)
 
  canvas.draw_line((0,290+top),(100,290+top),3,'Red')
  #canvas.draw_line((150,290+top),(300,290+top),3,'Blue')
  canvas.draw_line((500,290+top),(150,290+top),3,'Blue') 
  
  canvas.draw_circle((420, 290+top), 30, 2, 'Blue', color(str(bits['A'])))
  
  canvas.draw_text("A",(115,270+top),24,cl2)
  canvas.draw_text("L",(410,240+top),24,cl2)
  
  if bits['A'] == 0:
    canvas.draw_line((100,290+top),(150,270+top),3,'Orange')
  else:
    canvas.draw_line((100,290+top),(150,290+top),3,'Orange')
  
  """
Exemple #10
0
 def render(self):
 
   #global errors, mot, to_find, msg , end_game
 
   canvas.clear()
 
   if self.msg <> None:
     canvas.draw_text(200,250,self.msg)
 
   if self.end_game:
     canvas.add_button(26*18,0,18,18,"@")
   
   c = self.get_mouse()
   if c <> None:
     #une lettre est cliquee mouse_handler
     #canvas.draw_text(200,250,c)
     self.mouse_handler(c)
   
 
   w = 18
   for i in range(26):
     canvas.add_button(i*w,0,18,18,chr(65+i))
 
 
   n = len(self.mot)
   p = (500 * 2) / ( 3*n + 1 )
   e = p / 2
   
   for i in range(len(self.mot)):
     if self.mot[i] in self.to_find:
       canvas.draw_line((i+1)*e+(i)*p,80,(i+1)*(e+p),80)
     else:
       a = (i+1)*e+(i)*p
       b = (i+1)*(e+p)
       canvas.draw_text((a+b)/2 - e/2 , 70, self.mot[i])
 
 
   if (self.errors > 1):
     canvas.draw_line(100,400,200,400)
   if (self.errors >= 2):
     canvas.draw_line(100,400,200,400)  
   if (self.errors >= 3):
     canvas.draw_line(150,400,150,150)
   if (self.errors >= 4):
     canvas.draw_line(150,150,300,150)
   if (self.errors >= 5):
     canvas.draw_line(225,150,150,230)
   if (self.errors >= 6):
     canvas.draw_line(300,150,300,180)
   if (self.errors >= 7):
     canvas.draw_circle(300,200,20)
   if (self.errors >= 8):
     canvas.draw_line(300,220,300,300)
   if (self.errors >= 9):
     canvas.draw_line(300,300,330,360)
   if (self.errors >= 10):
     canvas.draw_line(300,300,270,360)
   if (self.errors >= 11):
     canvas.draw_line(300,240,330,300)
   if (self.errors >= 12):
     canvas.draw_line(300,240,270,300)
def main():
    console.alert('Motion Experiment 2',
                  'yo gang gang, we gonna measure this motion', 'Continue')
    motion.start_updates()
    sleep(0.2)
    print('Capturing motion data...')
    w = 1000
    h = 1400

    while True:
        sleep(0.01)
        canvas.set_size(w, h)
        current = motion.get_gravity()
        newMotion = [0, 0, 0]
        for i in range(len(current)):
            newMotion[i] = (current[i] * (10**3)) // 1
        #print(newMotion)
        x = newMotion[0] + 1000
        y = newMotion[1] + 1000
        z = newMotion[2] + 1000
        goalX = w / 2
        goalY = h / 2

        #bottom
        if (abs(x - 1000) < 500 and abs(y - 1000) < 600 and abs(z - 0) < 500):
            canvas.set_fill_color(1, 0, 0)
            canvas.draw_text("bottom",
                             x - 500,
                             y - 400,
                             font_name='Courier New',
                             font_size=50.0)
        #top
        if (abs(x - 1000) < 500 and abs(y - 1000) < 600
                and abs(z - 2000) < 500):
            canvas.set_fill_color(0, 0, 1)
            canvas.draw_text("top",
                             1500 - x,
                             1700 - y,
                             font_name='Courier New',
                             font_size=50.0)
        #right
        if (abs(x - 0) < 500 and abs(y - 1000) < 600 and abs(z - 1000) < 500):
            canvas.set_fill_color(0, 0, 1)
            canvas.draw_text("right",
                             500 - x,
                             1500 - y,
                             font_name='Courier New',
                             font_size=50.0)
        #left
        if (abs(x - 2000) < 500 and abs(y - 1000) < 600
                and abs(z - 1000) < 500):
            canvas.set_fill_color(0, 0, 1)
            canvas.draw_text("left",
                             x - 1500,
                             1500 - y,
                             font_name='Courier New',
                             font_size=50.0)
        #front
        if (abs(x - 1000) < 500 and abs(y - 0) < 600 and abs(z - 1000) < 500):
            canvas.set_fill_color(0, 0, 1)
            canvas.draw_text("front",
                             500 - y,
                             1500 - z,
                             font_name='Courier New',
                             font_size=50.0)
        #back
        if (abs(x - 1000) < 500 and abs(y - 2000) < 600
                and abs(z - 1000) < 500):
            canvas.set_fill_color(0, 0, 1)
            canvas.draw_text("back",
                             y - 1500,
                             z - 500,
                             font_name='Courier New',
                             font_size=50.0)

        # if (z > 1000):
        # 	canvas.set_fill_color(0, 0, 1)
        # 	canvas.draw_text("top", 1500-x, 1700-y, font_name='Courier New', font_size=50.0)

    motion.stop_updates()
    print('Capture finished, plotting...')
Exemple #12
0
e = p / 2

lettres = []
to_find = []

for c in mot:
  if not(c in to_find):
    to_find.append(c)

while (len(to_find)>0) and (errors<12):
  dessine(mot,p,e)
  lettre = input('Donne une lettre: ')
  ch = lettre[0].upper()
  if ch in ['A','B','C','D','E','F','G','H','I','J',
          'K','L','M','N','O','P','Q','R','S','T',
          'U','V','W','X','Y','Z','-']:
    if not(ch in lettres):
      lettres.append(ch)
    if ch in mot:
      to_find.remove(ch)
    else:
      errors += 1
      process()
    
    dessine(mot,p,e)
 
if (errors >= 12):
  canvas.draw_text( 200 , 250 , "YOU LOOSE :(")
else:
  canvas.draw_text( 200 , 250 , "YOU WIN :)")
errors = 0  
Exemple #13
0
 def draw_text(self, text, x, y, font_name=None, font_size=None):
     if font_size is None:
         font_size = self.font_size
     if font_name is None:
         font_name = self.font_name
     canvas.draw_text(text, *self.xyWorld(x, y), font_name, font_size)
def draw_label(s, x, y):
	fs = 30
	fnt = 'Helvetica-Bold'
	w, h = canvas.get_text_size(str(s), fnt, fs)
	canvas.set_fill_color(0,0,0)
	canvas.draw_text(str(s), x - w / 2, y - h / 2, fnt, fs)
# https://forum.omz-software.com/topic/3238/the-color-of-the-text-that-is-drawn-with-draw_text

import canvas

canvas.set_size(600, 600)
canvas.set_fill_color(1, 0, 0)  #red
text = 'OK'
x = 0
y = 400
font_family = 'Helvetica-Bold'
font_size = 40
canvas.draw_text(text, x, y, font_family, font_size)
Exemple #16
0
    def paint(self, width, height):
        # start with unit diagonal
        self.unit_diagonal(self.view_tm)

        # rotate object
        self.rotx(self.xinc, self.rotx_tm)
        self.am4x4(self.view_tm, self.rotx_tm, self.view_tm)

        self.roty(self.yinc, self.roty_tm)
        self.am4x4(self.view_tm, self.roty_tm, self.view_tm)

        self.rotz(self.zinc, self.rotz_tm)
        self.am4x4(self.view_tm, self.rotz_tm, self.view_tm)

        # scale
        self.scaleit(self.scale, self.scale, self.scale, self.scale_tm)
        self.am4x4(self.view_tm, self.scale_tm, self.view_tm)

        # move coordinates to origin
        self.trans(-self.xe, -self.ye, -self.ze, self.trans_tm)
        self.am4x4(self.view_tm, self.trans_tm, self.view_tm)

        # rotate -90 deg. about x axis
        self.rotx(1.5708, self.rotx_tm)
        self.am4x4(self.view_tm, self.rotx_tm, self.view_tm)

        # rotate -theta about y axis
        theta = math.atan2(-(self.xe - self.xt), -(self.ye - self.yt))
        self.roty(-theta, self.roty_tm)
        self.am4x4(self.view_tm, self.roty_tm, self.view_tm)

        # rotate -phi around x axis
        phi = math.atan2((self.ze - self.zt),
                         math.sqrt((self.xe - self.xt) * (self.xe - self.xt) +
                                   (self.ye - self.yt) * (self.ye - self.yt)))
        self.rotx(-phi, self.rotx_tm)
        self.am4x4(self.view_tm, self.rotx_tm, self.view_tm)

        # change rh to lh coordinates
        self.scaleit(1, -1, -1, self.scale_tm)
        self.am4x4(self.view_tm, self.scale_tm, self.view_tm)

        # add perspective
        if self.persp:
            self.perspect(self.s, self.d, self.persp_tm)
            self.am4x4(self.view_tm, self.persp_tm, self.view_tm)

        # transform the view
        self.am20x4(self.view_tm, self.view)

        # draw the view in width/height
        orgx = width / 2
        orgy = height / 2
        if self.persp:
            for i in range(self.vertnum):
                self.view[i][0] = (orgx * self.view[i][0] /
                                   self.view[i][2]) + orgx
                self.view[i][1] = (orgy * self.view[i][1] /
                                   self.view[i][2]) + orgy
        canvas.begin_updates()
        canvas.set_size(width, height)
        canvas.set_stroke_color(0, 1, 0)
        for i in range(self.facenum):
            for j in range(self.edgenum[i] - 1):
                canvas.draw_line(self.view[self.face[i][j]][0],
                                 self.view[self.face[i][j]][1],
                                 self.view[self.face[i][j + 1]][0],
                                 self.view[self.face[i][j + 1]][1])
            canvas.draw_line(self.view[self.face[i][j + 1]][0],
                             self.view[self.face[i][j + 1]][1],
                             self.view[self.face[i][0]][0],
                             self.view[self.face[i][0]][1])
            canvas.set_fill_color(0, 1, 0)
        self.frames += 1
        canvas.draw_text(
            'Object: ' + self.name + '   Frames: ' + str(self.frames) +
            '   Angle: ' + str(self.yinc), 10, 10)
        canvas.end_updates()
Exemple #17
0
  def render(self):
    global a_missile, lives, score
    
          
    if lives == 0:
      canvas.draw_text("YOU LOOSE :(",(200,230),30,"Red")
      return
    
    self.time += 1
    wtime = (self.time / 4) % WIDTH
    
    canvas.clear()
    canvas.draw_image(self.fond.get_image(),self.fond.center,self.fond.size,(250,250),self.fond.size2,0)
    canvas.draw_image(self.debris.get_image(), self.debris.get_center(), self.debris.get_size(), (wtime - WIDTH / 2, HEIGHT / 2), (WIDTH, HEIGHT),0)
    canvas.draw_image(self.debris.get_image(), self.debris.get_center(), self.debris.get_size(), (wtime + WIDTH / 2, HEIGHT / 2), (WIDTH, HEIGHT),0)

    canvas.draw_image(self.ship.info.image,self.ship.info.center,self.ship.info.size,self.ship.pos,self.ship.info.size2,self.ship.angle)
    #canvas.draw_circle(self.ship.pos[0],self.ship.pos[1],self.ship.radius)
    canvas.draw_image(self.a_missile.info.image,self.a_missile.info.center,self.a_missile.info.size,self.a_missile.pos,self.a_missile.info.size2,self.a_missile.angle)  
   
    
    if self.a_rock.exploded:
      if (wtime) % 24 == 0:
        self.a_rock.exploded = False
        x = random.randrange(0,2)
        y = random.randrange(0,HEIGHT)
        x = x * WIDTH
        self.a_rock.set_pos(x,y)
        if x == 0:
          vx = 1
        else:
          vx = -1
        vy = 1
        self.a_rock.set_vit(vx,vy)
      #self.a_rock.exploded = False
      canvas.draw_image(self.a_rock_exploded.info.image,
                        (self.a_rock_exploded.info.center[0]
                         +((wtime) % 24)*self.a_rock_exploded.info.size[0],
                         self.a_rock_exploded.info.center[1]),
                        self.a_rock_exploded.info.size,
                        self.a_rock.pos,
                        self.a_rock_exploded.info.size,
                        0)  

    else:
      canvas.draw_image(self.a_rock.info.image,self.a_rock.info.center,self.a_rock.info.size,self.a_rock.pos,self.a_rock.info.size2,self.a_rock.angle)  
    canvas.draw_text("lives: "+str(lives)+" score: "+str(score),(320,30),24,'Orange')
    
    #canvas.draw_circle(self.a_rock.pos[0],self.a_rock.pos[1],self.a_rock.radius)
    
    c = self.get_kb()
    if c == '32':
      self.ship.shoot(self.a_missile)
    if c == '37':
      self.ship.dec_angle()
    if c == '39':
      self.ship.inc_angle()
    if c == '38' and (self.time % 10 == 0):
      self.ship.set_thrust(True)
    if c == None:
      self.ship.stop_angle()
      self.ship.set_thrust(False)
      
    self.ship.update()
    self.a_missile.update()
    self.a_rock.update()
    self.check_collision()
def draw():

    global bits, out
    canvas.fill_rect(0, 0, 500, 500)
    left = 80
    top = 30
    canvas.draw_line((0, 30 + top), (500, 30 + top), 4, "Blue")
    cl2 = "Yellow"

    canvas.draw_text("ENTREES", (left - 30, 25 + top), 24, cl2)
    canvas.draw_text("SORTIES", (left + 250, 25 + top), 24, cl2)
    canvas.draw_circle((left, 50 + top), 10, 2, "Blue", color(str(bits["A"])))
    canvas.draw_circle((left, 73 + top), 10, 2, "Blue", color(str(bits["B"])))
    canvas.draw_circle((left, 96 + top), 10, 2, "Blue", color(str(bits["C"])))

    canvas.draw_circle((left + 170, 50 + top), 10, 2, "Blue", color(out))

    canvas.draw_text("A: " + str(bits["A"]), (left + 15, 58 + top), 24, cl2)
    canvas.draw_text("B: " + str(bits["B"]), (left + 15, 80 + top), 24, cl2)
    canvas.draw_text("C: " + str(bits["C"]), (left + 15, 102 + top), 24, cl2)
    canvas.draw_text(inp.get_text(), (left + 185, 58 + top), 24, cl2)

    """
    finally:
        canvas.restore_gstate()


screenHeight = 512
circleHeight = 128

colorBlue = (0, 0, 1)
colorGreen = (0, 1, 0)
colorRed = (1, 0, 0)


def coloredCircle(inColor, inX, inY):
    canvas.set_fill_color(*inColor)
    canvas.fill_ellipse(inX, inY, circleHeight, circleHeight)


canvas.clear()
canvas.set_size(screenHeight * 1.42, screenHeight)

with privateGstate():  # Save and then restore the canvas.gstate
    canvas.rotate(89)  # Text on an angle.
    canvas.draw_text('Green on top -->', 154, 0, 'Helvetica', 36)
canvas.draw_text('<-- Red and Blue on bottom', 282, 52, 'Helvetica', 36)

x = 20 + circleHeight
coloredCircle(colorRed, 10, 10)  # Red circle appears at bottom.
with flippedDisplay():  # Change origin to topLeft instead of bottomLeft.
    coloredCircle(colorGreen, x, 10)  # Green circle appears at top.
coloredCircle(colorBlue, x, 10)  # Blue circle appears at bottom.
def draw(mycanvas):
    # ceci est la fonction qui gere l'ecran
    global bits
    left = 80
    top = 30
    canvas.draw_line((0, 30 + top), (500, 30 + top), 4, "Blue")
    cl2 = "Yellow"

    canvas.draw_text("ENTREES", (left - 30, 25 + top), 24, cl2)
    canvas.draw_text("SORTIES", (left + 250, 25 + top), 24, cl2)
    canvas.draw_circle((left, 50 + top), 10, 2, "Blue", color(str(bits["A"])))
    canvas.draw_circle((left, 73 + top), 10, 2, "Blue", color(str(bits["B"])))
    canvas.draw_circle((left, 96 + top), 10, 2, "Blue", color(str(bits["C"])))

    equ = process(inp.get_text())
    canvas.draw_circle((left + 250, 50 + top), 10, 2, "Blue", color(equ))

    canvas.draw_text("A: " + str(bits["A"]), (left + 15, 58 + top), 24, cl2)
    canvas.draw_text("B: " + str(bits["B"]), (left + 15, 80 + top), 24, cl2)
    canvas.draw_text("C: " + str(bits["C"]), (left + 15, 102 + top), 24, cl2)
    canvas.draw_text(inp.get_text(), (left + 265, 58 + top), 24, cl2)

    """