Bonjour,

je cherche a reproduire l'image ci-dessus avec Tk.
Nom : image.L8BX1X.png
Affichages : 383
Taille : 3,6 Ko

J'ai réussi a le faire avec la fonction create_line() mais j'aimerais le faire aussi avec la fonction create_polygon(). Mon problème étant qu'a chaque fois je n'arrive pas a avoir le même rendu que sur l'image. Soit c'est trop petit soit c'est décalé soit c'est incliné...

Voici mon code pour la fonction create_line() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#! /usr/bin/env python
# -*- coding: utf-8 -*-
 
# description des sept segments LCD
segments = \
[ # X1, Y1, X2, Y2
	[15, 10, 55, 10],
	[15, 60, 55, 60],
	[15, 110, 55, 110],
	[10, 15, 10, 55],
	[10, 65, 10, 105],
	[60, 15, 60, 55],
	[60, 65, 60, 105],
]
 
# description des lettres en termes de leurs segments
description = {'L' : [3, 4, 2], 'P' : [0, 3, 5, 1, 4], 'U' : [3, 4, 5, 6, 2]} # etc...
 
# construction des widgets
from Tkinter import *
 
top = Tk()
canevas = Canvas(top, height=150, width=325)
canevas.pack()
 
# dessin des segments
offset = 70
ep = 10
couleur = '"blue"'
decal = 20
 
for K in 'PULL' :
	les_segments = description [K]
	for SG in les_segments :
		S = segments [SG]
		X1 = repr(S [0] + decal) ; Y1 = repr(S [1])
		X2 = repr(S [2] + decal) ; Y2 = repr(S [3])
		args = '%s, %s, %s, %s' % (X1, Y1, X2, Y2)
		args += ', width=%s, fill=%s' % (repr(ep), couleur)
		eval('canevas.create_line(%s)' % args)
	decal += offset
 
top.mainloop()
Et voici celui de la fonction create_polygon() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#! /usr/bin/env python
# -*- coding: utf-8 -*-
 
from sys import *
 
# description des sept segments LCD
segments = \
[ # X1, Y1, X2, Y2, X3, Y3
	[15, 10, 55, 10],
	[15, 60, 55, 60],
	[15, 110, 55, 110],
	[10, 15, 10, 55],
	[10, 65, 10, 105],
	[60, 15, 60, 55],
	[60, 65, 60, 105],
]
 
# description des lettres en termes de leurs segments
description = {'L' : [3, 4, 2], 'P' : [0, 3, 5, 1, 4], 'U' : [3, 4, 5, 6, 2],
			   'D' : [0, 5, 3, 4, 6, 2], 'E' : [0, 3, 2, 1, 4], 'S' : [3, 1, 0, 6, 2], 
			   'C' : [0, 3, 4, 2], 'R' : [0, 6, 3, 5, 1, 4], 'I' : [3, 4], 'P' : [0, 3, 4, 5, 1], 
			   'T' : [0, 3, 4], 'O' : [0, 3, 4, 2, 5, 6], 'N' : [6, 3, 4, 1], 'G' : [0, 3, 4, 2, 6, 1], 
			   'M' : [6, 3, 4, 1, 5]}
 
from Tkinter import *
 
def Affich_LCD(mot) :
	top = Tk()
	canevas = Canvas(top, height=150, width=800)
	canevas.pack()
	offset = 70
	ep = 20
	couleur = '"blue"'
	decal = 20
	for K in mot :
		les_segments = description [K]
		for SG in les_segments :
			S = segments [SG]
			X1 = repr(S [0] + decal) ; Y1 = repr(S [1])
			X2 = repr(S [2] + decal) ; Y2 = repr(S [3])
			X3 = repr(S [4] + decal) ; Y3 = repr(S [5])
			args = '%s, %s, %s, %s, %s, %s' % (X1, Y1, X2, Y2, X3, Y3)
			args += ', width=%s, fill=%s' % (repr(ep), couleur)
			eval('canevas.create_polygon(%s)' % args)
		decal += offset
	top.mainloop()
 
if len(argv) > 1 : Affich_LCD(argv[1])
else : exit('Mot manquant')