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 120
| #!/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"
kwds["highlightthickness"] = False
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() |
Partager