tkinter : textes et lignes

Des segments au hasard.

Créez une fenêtre graphique tkinter (width = largeur, height = hauteur, à vous de choisir les valeurs pour largeur et hauteur) avec un bouton et une zone de dessin (canvas).

Un clic sur le bouton créera un segment d'extrémités (x, 0) et (x', hauteur), x et x' sont choisis au hasard entre 0 et largeur à chaque clic. La couleur du segment devra être choisie au hasard dans une liste à chaque clic.

segments au hasard


import tkinter 
import random
 	
 	
def traceSegment(xA,yA,xB,yB, couleur):
	""" Trace un segment d'extrémités A(xA,yA) et B(xB,YB) et de couleur couleur."""
	canevas.create_line(xA,yA,xB,yB, fill = couleur, width = 2)
	
def choixCouleur() :
	""" Retourne une couleur au hasard dans une liste prédéfinie."""
	listeCouleur = [ 'red', 'yellow', 'green', 'orange', 'magenta', 'brown', 'blue', 'purple', 'cyan' ]
	return random.choice(listeCouleur)
	
def choixAbscisse() :
	""" retourne un réel au hasard entre 0 et largeur."""
	return random.uniform(0,largeur)	
	
def segmentHasard() :
	""" lance les choix au hasard et le tracé."""
	couleur = choixCouleur()
	abscisseA = choixAbscisse()
	abscisseB = choixAbscisse()
	traceSegment( abscisseA, 0, abscisseB, hauteur, couleur)
	
	
	
largeur = 500
hauteur = 500 

fenetre = tkinter.Tk()  
canevas = tkinter.Canvas(fenetre, width = largeur, height = hauteur)
canevas.pack()
 
 

bouton = tkinter.Button(fenetre, text = "Tracez un segment", command = segmentHasard)
bouton.pack()
  

fenetre.mainloop()

Multiples de 9.

Créez une fenêtre tkinter comportant un bouton et un canevas.

Chaque clic sur le bouton affichera un multiple de 9.

Le premier multiple de 9 (0*9 = 0) s'affichera en haut à gauche du canevas, le multiple suivant juste en dessous...


import tkinter 
import random
 	
 	
def ligneTable() :
	global i
	ligne = "{}*{} = {}".format(i, facteur, i*facteur)
	canevas.create_text( 0, i*10, anchor = 'nw', text = ligne)
	i+=1
	
	
largeur = 200
hauteur = 500 

fenetre = tkinter.Tk()  
canevas = tkinter.Canvas(fenetre, width = largeur, height = hauteur)
canevas.pack()
 
 
i=0
facteur = 9 
bouton = tkinter.Button(fenetre, text = "Multiple suivant", command = ligneTable)
bouton.pack()
  

fenetre.mainloop()

Tracer un échiquier.

Créez une fenêtre tkinter comportant deux boutons et un canevas.

Le premier bouton créera un échiquier, le second bouton placera un pion au hasard dans une case de l'échiquier.

un échiquier

On utilisera create_rectangle pour les cases du damier et create_oval pour dessiner les pions.


import tkinter as tk
from random import randrange, choice   


# liste de couleurs, permettra un choix au hasard des couleurs des cases et des pions
couleurs = ['snow', 'ghost white', 'white smoke', 'gainsboro', 'floral white', 'old lace',
        'linen', 'antique white', 'papaya whip', 'blanched almond', 'bisque', 'peach puff',
        'navajo white', 'lemon chiffon', 'mint cream', 'azure', 'alice blue', 'lavender',
        'lavender blush', 'misty rose', 'dark slate gray', 'dim gray', 'slate gray',
        'light slate gray', 'gray', 'light grey', 'midnight blue', 'navy', 'cornflower blue', 'dark slate blue',
        'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal blue',  'blue',
        'dodger blue', 'deep sky blue', 'sky blue', 'light sky blue', 'steel blue', 'light steel blue',
        'light blue', 'powder blue', 'pale turquoise', 'dark turquoise', 'medium turquoise', 'turquoise',
        'cyan', 'light cyan', 'cadet blue', 'medium aquamarine', 'aquamarine', 'dark green', 'dark olive green',
        'dark sea green', 'sea green', 'medium sea green', 'light sea green', 'pale green', 'spring green',
        'lawn green', 'medium spring green', 'green yellow', 'lime green', 'yellow green',
        'forest green', 'olive drab', 'dark khaki', 'khaki', 'pale goldenrod', 'light goldenrod yellow',
        'light yellow', 'yellow', 'gold', 'light goldenrod', 'goldenrod', 'dark goldenrod', 'rosy brown',
        'indian red', 'saddle brown', 'sandy brown',
        'dark salmon', 'salmon', 'light salmon', 'orange', 'dark orange',
        'coral', 'light coral', 'tomato', 'orange red', 'red', 'hot pink', 'deep pink', 'pink', 'light pink',
        'pale violet red', 'maroon', 'medium violet red', 'violet red',
        'medium orchid', 'dark orchid', 'dark violet', 'blue violet', 'purple', 'medium purple',
        'thistle', 'snow2', 'snow3',
        'snow4', 'seashell2', 'seashell3', 'seashell4',   'bisque2', 'bisque3', 'bisque4', 'PeachPuff2',
        'PeachPuff3', 'PeachPuff4', 'NavajoWhite2', 'NavajoWhite3', 'NavajoWhite4',
        'LemonChiffon2', 'LemonChiffon3', 'LemonChiffon4', 'cornsilk2', 'cornsilk3',
        'cornsilk4', 'ivory2', 'ivory3', 'ivory4', 'honeydew2', 'honeydew3', 'honeydew4',
        'LavenderBlush2', 'LavenderBlush3', 'LavenderBlush4', 'MistyRose2', 'MistyRose3',
        'MistyRose4', 'azure2', 'azure3', 'azure4', 'SlateBlue1', 'SlateBlue2', 'SlateBlue3',
        'SlateBlue4', 'RoyalBlue1', 'RoyalBlue2', 'RoyalBlue3', 'RoyalBlue4', 'blue2', 'blue4',
        'DodgerBlue2', 'DodgerBlue3', 'DodgerBlue4', 'SteelBlue1', 'SteelBlue2',
        'SteelBlue3', 'SteelBlue4', 'DeepSkyBlue2', 'DeepSkyBlue3', 'DeepSkyBlue4',
        'SkyBlue1', 'SkyBlue2', 'SkyBlue3', 'SkyBlue4', 'LightSkyBlue1', 'LightSkyBlue2',
        'LightSkyBlue3', 'LightSkyBlue4', 'SlateGray1', 'SlateGray2', 'SlateGray3',
        'SlateGray4', 'LightSteelBlue1', 'LightSteelBlue2', 'LightSteelBlue3',
        'LightSteelBlue4', 'LightBlue1', 'LightBlue2', 'LightBlue3', 'LightBlue4',
        'LightCyan2', 'LightCyan3', 'LightCyan4', 'PaleTurquoise1', 'PaleTurquoise2',
        'PaleTurquoise3', 'PaleTurquoise4', 'CadetBlue1', 'CadetBlue2', 'CadetBlue3',
        'CadetBlue4', 'turquoise1', 'turquoise2', 'turquoise3', 'turquoise4', 'cyan2', 'cyan3',
        'cyan4', 'DarkSlateGray1', 'DarkSlateGray2', 'DarkSlateGray3', 'DarkSlateGray4',
        'aquamarine2', 'aquamarine4', 'DarkSeaGreen1', 'DarkSeaGreen2', 'DarkSeaGreen3',
        'DarkSeaGreen4', 'SeaGreen1', 'SeaGreen2', 'SeaGreen3', 'PaleGreen1', 'PaleGreen2',
        'PaleGreen3', 'PaleGreen4', 'SpringGreen2', 'SpringGreen3', 'SpringGreen4',
        'green2', 'green3', 'green4', 'chartreuse2', 'chartreuse3', 'chartreuse4',
        'OliveDrab1', 'OliveDrab2', 'OliveDrab4', 'DarkOliveGreen1', 'DarkOliveGreen2',
        'DarkOliveGreen3', 'DarkOliveGreen4', 'khaki1', 'khaki2', 'khaki3', 'khaki4',
        'LightGoldenrod1', 'LightGoldenrod2', 'LightGoldenrod3', 'LightGoldenrod4',
        'LightYellow2', 'LightYellow3', 'LightYellow4', 'yellow2', 'yellow3', 'yellow4',
        'gold2', 'gold3', 'gold4', 'goldenrod1', 'goldenrod2', 'goldenrod3', 'goldenrod4',
        'DarkGoldenrod1', 'DarkGoldenrod2', 'DarkGoldenrod3', 'DarkGoldenrod4',
        'RosyBrown1', 'RosyBrown2', 'RosyBrown3', 'RosyBrown4', 'IndianRed1', 'IndianRed2',
        'IndianRed3', 'IndianRed4', 'sienna1', 'sienna2', 'sienna3', 'sienna4', 'burlywood1',
        'burlywood2', 'burlywood3', 'burlywood4', 'wheat1', 'wheat2', 'wheat3', 'wheat4', 'tan1',
        'tan2', 'tan4', 'chocolate1', 'chocolate2', 'chocolate3', 'firebrick1', 'firebrick2',
        'firebrick3', 'firebrick4', 'brown1', 'brown2', 'brown3', 'brown4', 'salmon1', 'salmon2',
        'salmon3', 'salmon4', 'LightSalmon2', 'LightSalmon3', 'LightSalmon4', 'orange2',
        'orange3', 'orange4', 'DarkOrange1', 'DarkOrange2', 'DarkOrange3', 'DarkOrange4',
        'coral1', 'coral2', 'coral3', 'coral4', 'tomato2', 'tomato3', 'tomato4', 'OrangeRed2',
        'OrangeRed3', 'OrangeRed4', 'red2', 'red3', 'red4', 'DeepPink2', 'DeepPink3', 'DeepPink4',
        'HotPink1', 'HotPink2', 'HotPink3', 'HotPink4', 'pink1', 'pink2', 'pink3', 'pink4',
        'LightPink1', 'LightPink2', 'LightPink3', 'LightPink4', 'PaleVioletRed1',
        'PaleVioletRed2', 'PaleVioletRed3', 'PaleVioletRed4', 'maroon1', 'maroon2',
        'maroon3', 'maroon4', 'VioletRed1', 'VioletRed2', 'VioletRed3', 'VioletRed4',
        'magenta2', 'magenta3', 'magenta4', 'orchid1', 'orchid2', 'orchid3', 'orchid4', 'plum1',
        'plum2', 'plum3', 'plum4', 'MediumOrchid1', 'MediumOrchid2', 'MediumOrchid3',
        'MediumOrchid4', 'DarkOrchid1', 'DarkOrchid2', 'DarkOrchid3', 'DarkOrchid4',
        'purple1', 'purple2', 'purple3', 'purple4', 'MediumPurple1', 'MediumPurple2',
        'MediumPurple3', 'MediumPurple4', 'thistle1', 'thistle2', 'thistle3', 'thistle4',
         'gray78', 'gray79', 'gray80', 'gray81', 'gray82', 'gray83',
        'gray84', 'gray85', 'gray86', 'gray87', 'gray88', 'gray89', 'gray90', 'gray91', 'gray92',
        'gray93', 'gray94', 'gray95', 'gray97', 'gray98', 'gray99']

coteDuneCase = 30  # taille d'une 'cellule' du damier
nombreDeRangees = 8 # nombre de lignes ou encore nombre de colonnes du damier
couleur1 = choice(couleurs)
couleur2 = choice(couleurs)
while couleur1 == couleur2 : couleur2 = choice(couleurs)


 
  
def carre(csgx, csgy,  cl) :
    """
        dessine un carré dans canevas.
        csgx, csgy : abscisse et ordonnée du coin supérieur gauche (csg) du carré.
        cl : couleur de remplissage du carré
    """
    canevas.create_rectangle(csgx, csgy, csgx+coteDuneCase, csgy+coteDuneCase, fill=cl )
    
    
  
def bandeHorizontaleDeCarres(x, y, debutCouleur1):
    """
        Dessine dans canevas une ligne du damier.
    """
    
    if debutCouleur1  :
        c1, c2 = couleur1, couleur2
    else :
        c1, c2 = couleur2, couleur1
        
    for _ in range(nombreDeRangees//2) :
        carre(x, y, c1)
        carre(x+coteDuneCase, y, c2)
        x += 2*coteDuneCase  
    
        
           
def damier( ):
    """
    Dessin du damier
    """
     
    for y in range(nombreDeRangees) :
        bandeHorizontaleDeCarres(0, y*coteDuneCase, (y%2)==0)
         
     
        

        
def cercle(x, y, r, coul):
    """
    dessiner un cercle de centre x,y, de rayon r, de couleur coul
    """
    canevas.create_oval(x-r, y-r, x+r, y+r, fill=coul)
    
    
    
def ajouter_pion():
    """
    dessiner un pion au hasard sur le damier
    """
    
    # tirer au hasard les coordonnées du pion :
    x = coteDuneCase/2 + randrange(nombreDeRangees) * coteDuneCase
    y = coteDuneCase/2 + randrange(nombreDeRangees) * coteDuneCase
    # choix au hasard de la couleur du pion  :
    coul = choice(couleurs)
    while coul == couleur2 or coul ==  couleur1 : coul = choice(couleurs)
    # tracé du disque dans la case :
    cercle(x, y, coteDuneCase/3, coul)
        
        
        
        
##############################################################       
##### main
#############################################################
    
 



fenetrePrincipale = tk.Tk()

d = coteDuneCase*nombreDeRangees # dimension damier
canevas = tk.Canvas(fenetrePrincipale, width = d , height = d , background ='white')
canevas.pack(side =tk.TOP, padx =5, pady =5)

bouton1 = tk.Button(fenetrePrincipale, text ='damier', command = damier )
bouton1.pack(side =tk.LEFT, padx =3, pady =3)

bouton2 = tk.Button(fenetrePrincipale, text ='pions', command =ajouter_pion)
bouton2.pack(side =tk.RIGHT, padx =3, pady =3)

fenetrePrincipale.mainloop()