Hello,

Je sèche un peu, là, quelqu'un aurait une piste pour éliminer le contour gris entre chaque digit? Je le trouve assez disgracieux. Je pensais qu'il venait du container, une Frame, donc, mais non...

A+

Pfeuh

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import Tkinter as gui
 
class DIGIT(gui.Canvas):
    def __init__(self, container, fill_color="red", seg_length=10, seg_thickness=2, **kwds):
        self.__container = container
        self.__fill_color = fill_color
        self.__seg_length = seg_length
        self.__seg_thickness = seg_thickness
        self.__x_origin = self.__seg_thickness * 3 - 1
        self.__y_origin = self.__seg_thickness * 2
        kwds["bd"] = 0
        kwds["width"] = seg_length + seg_thickness * 4
        kwds["height"] = seg_length * 2 + seg_thickness * 5 + 1
        kwds["bg"] = "black"
        gui.Canvas.__init__(self, container, **kwds)
        # let's define the 7 segments
        self.__seg_a = self.drawHorizontalSegment(self.__x_origin, self.__y_origin)
        self.__seg_b = self.drawVerticalSegment(self.__x_origin + self.__seg_length, self.__y_origin + self.__seg_thickness)
        self.__seg_c = self.drawVerticalSegment(self.__x_origin + self.__seg_length, self.__y_origin + self.__seg_thickness * 2 + self.__seg_length)
        self.__seg_d = self.drawHorizontalSegment(self.__x_origin, self.__y_origin + self.__seg_length * 2 + self.__seg_thickness * 2)
        self.__seg_e = self.drawVerticalSegment(self.__x_origin - self.__seg_thickness, self.__y_origin + self.__seg_length + self.__seg_thickness * 2)
        self.__seg_f = self.drawVerticalSegment(self.__x_origin - self.__seg_thickness, self.__y_origin + self.__seg_thickness)
        self.__seg_g = self.drawHorizontalSegment(self.__x_origin, self.__y_origin + self.__seg_length + self.__seg_thickness)
        self.__segments = (self.__seg_a, self.__seg_b, self.__seg_c, self.__seg_d, self.__seg_e, self.__seg_f, self.__seg_g)
        # let's define the mini font
        self.__values = []
        self.__values.append((self.__seg_a, self.__seg_b, self.__seg_c, self.__seg_d, self.__seg_e, self.__seg_f))
        self.__values.append((self.__seg_b, self.__seg_c))
        self.__values.append((self.__seg_a, self.__seg_b, self.__seg_d, self.__seg_e, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_b, self.__seg_c, self.__seg_d, self.__seg_g))
        self.__values.append((self.__seg_b, self.__seg_c, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_c, self.__seg_d, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_c, self.__seg_d, self.__seg_e, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_b, self.__seg_c))
        self.__values.append((self.__seg_a, self.__seg_b, self.__seg_c, self.__seg_d, self.__seg_e, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_b, self.__seg_c, self.__seg_d, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_b, self.__seg_c, self.__seg_e, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_c, self.__seg_d, self.__seg_e, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_d, self.__seg_e, self.__seg_f))
        self.__values.append((self.__seg_b, self.__seg_c, self.__seg_d, self.__seg_e, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_d, self.__seg_e, self.__seg_f, self.__seg_g))
        self.__values.append((self.__seg_a, self.__seg_e, self.__seg_f, self.__seg_g))
        # let's initialize
        self.write(0)
 
    def drawHorizontalSegment(self, x, y):
        return self.create_rectangle(x, y, x + self.__seg_length, y + self.__seg_thickness, width=0, fill=self.__fill_color)
 
    def drawVerticalSegment(self, x, y):
        return self.create_rectangle(x, y, x + self.__seg_thickness, y + self.__seg_length, width=0, fill=self.__fill_color)
 
    def write(self, value):
        temp_value = value & 0x0f
        success = temp_value == value 
        self.__value = temp_value
        segments_on = self.__values[temp_value]
        for segment in self.__segments:
            if segment in segments_on:
                self.itemconfigure(segment, state='normal')
            else:
                self.itemconfigure(segment, state='hidden')
        # success means "Value not too big"
        return success
 
    def read(self):
        return self.__value
 
class DIGITS(gui.Frame):
    def __init__(self, container, nb_digits, fill_color="red", seg_length=10, seg_thickness=2, **kwds):
        self.__container = container
        self.__nb_digits = nb_digits
        gui.Frame.__init__(self, container, bd=0, padx=0, pady=0)
        self.digits = []
        for x in range(nb_digits):
            digit = DIGIT(self, fill_color, seg_length, seg_thickness, **kwds)
            digit.grid(column=x, row=0)
            self.digits.append(digit)
        self.write(0)
 
 
    def write(self, value, base=10):
        temp_value = value % base**(self.__nb_digits)
        success = temp_value == value 
        self.__value = temp_value
        for x in range(self.__nb_digits - 1, -1, -1):
            self.digits[x].write(temp_value % base)
            temp_value /=base
        # success means "Value not too big"
        return success
 
    def writeHex(self, value):
        return self.write(value, 16)
 
    def read(self):
        return self.__value
 
if __name__ == "__main__":
 
    import sys
 
    win = gui.Tk()
    frm = gui.Frame()
    wd_digits = []
    values = [0, 1, 9, 10, 11, 99, 123, 0x123, 0x1234, 0xfedc]
    for x in range(len(values)):
        wd = DIGITS(frm, 4, "green", 12, 2)
        wd.grid()
        wd.write(values[x], 16)
        wd_digits.append(wd)
    frm.grid()
 
    for x in range(len(values)):
        assert(wd_digits[x].read() == values[x])
    sys.stdout.write("A L L   T E S T S  P A S S E D !\n")
 
    win.mainloop()