File: paint.py

package info (click to toggle)
python-guizero 1.1.1%2Bdfsg1-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,676 kB
  • sloc: python: 6,286; makefile: 28; sh: 17
file content (76 lines) | stat: -rw-r--r-- 2,540 bytes parent folder | download | duplicates (3)
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
from guizero import App, Text, Box, Drawing, Slider, PushButton, Combo

def start_paint(event):
    painting.last_event = event

def stop_paint():
    painting.last_event = None
    painting.last_shape = None

def draw_paint(event):
    if tool.value == "line":
        painting.line(
            painting.last_event.x, painting.last_event.y, 
            event.x, event.y, 
            color=(red.value, green.value, blue.value), 
            width=line_width.value)

        painting.last_event = event
    else:
        if painting.last_shape is not None:
            painting.delete(painting.last_shape)
        
        if tool.value == "rectangle":
            painting.last_shape = painting.rectangle(
                painting.last_event.x, painting.last_event.y, 
                event.x, event.y, 
                color=(red.value, green.value, blue.value)
            )
        elif tool.value == "oval":
            painting.last_shape = painting.oval(
                painting.last_event.x, painting.last_event.y, 
                event.x, event.y, 
                color=(red.value, green.value, blue.value)
            )

def update_color():
    color_label.bg = (red.value, green.value, blue.value)
    color_label.text_color = (255 - red.value, 255 - green.value, 255 - blue.value)

def select_tool():
    line_width_box.visible = tool.value == "line"
    
a = App(title="Paintzero")

tool_box = Box(a, height="fill", border=True, align="left")
paint_box = Box(a, width="fill", height="fill", border=True, align="right")

tool = Combo(tool_box, options=["line", "rectangle", "oval"], selected="line", align="top", width="fill", command=select_tool)

color_label = Text(tool_box, text="color", align="top", width="fill")
color_label.bg = "black"
color_label.text_color = "white"

red = Slider(tool_box, end=255, command=update_color)
red.bg = (255, 0, 0)

green = Slider(tool_box, end=255, command=update_color)
green.bg = (0, 255, 0)

blue = Slider(tool_box, end=255, command=update_color)
blue.bg = (0, 0, 255)

line_width_box = Box(tool_box, align="top")
Text(line_width_box, text="width", align="top")
line_width = Slider(line_width_box, start=1, end=10, align="top")

painting = Drawing(paint_box, width="fill", height="fill")
painting.last_event = None
painting.last_shape = None
painting.when_left_button_pressed = start_paint
painting.when_mouse_dragged = draw_paint
painting.when_left_button_released = stop_paint

PushButton(tool_box, text="Clear", command=painting.clear, align="bottom", width="fill")

a.display()