drawzero 0.5.4__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {drawzero-0.5.4/src/drawzero.egg-info → drawzero-0.7.0}/PKG-INFO +15 -32
- {drawzero-0.5.4 → drawzero-0.7.0}/README.md +12 -29
- drawzero-0.7.0/docs/imgs/anim01.gif +0 -0
- drawzero-0.7.0/docs/imgs/grad01.png +0 -0
- drawzero-0.7.0/docs/imgs/grad02.png +0 -0
- drawzero-0.7.0/docs/imgs/grad03.png +0 -0
- drawzero-0.7.0/docs/imgs/input-controls.png +0 -0
- drawzero-0.7.0/docs/imgs/input-drawing.png +0 -0
- drawzero-0.7.0/docs/imgs/input-text-scroll.png +0 -0
- drawzero-0.7.0/docs/imgs/prim01.png +0 -0
- drawzero-0.7.0/docs/imgs/prim02.png +0 -0
- drawzero-0.7.0/docs/imgs/prim03.png +0 -0
- drawzero-0.7.0/docs/imgs/prim04.png +0 -0
- drawzero-0.7.0/docs/imgs/prim05.png +0 -0
- drawzero-0.7.0/docs/imgs/prim06.png +0 -0
- drawzero-0.7.0/docs/imgs/prim07.png +0 -0
- drawzero-0.7.0/docs/imgs/prim08.png +0 -0
- drawzero-0.7.0/docs/imgs/prim09.png +0 -0
- drawzero-0.7.0/docs/imgs/prim10.png +0 -0
- drawzero-0.7.0/docs/imgs/prim11.png +0 -0
- drawzero-0.7.0/docs/imgs/prim12.png +0 -0
- drawzero-0.7.0/docs/imgs/prim13.png +0 -0
- drawzero-0.7.0/docs/imgs/prim14.png +0 -0
- drawzero-0.7.0/docs/imgs/prim15.png +0 -0
- drawzero-0.7.0/docs/imgs/prim16.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/pyproject.toml +3 -3
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/__about__.py +1 -1
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/__init__.py +2 -0
- drawzero-0.7.0/src/drawzero/examples/16_keyboard_and_mouse.py +26 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/17_mouse_tube.py +1 -1
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/18_game_stars.py +9 -9
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/19_game_colors.py +3 -1
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/20_game_racing.py +4 -5
- drawzero-0.7.0/src/drawzero/examples/21_precise_drawing.py +28 -0
- drawzero-0.7.0/src/drawzero/examples/22_text_and_scroll.py +29 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/draw.py +7 -7
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/i18n.py +6 -0
- drawzero-0.7.0/src/drawzero/utils/input.py +466 -0
- drawzero-0.7.0/src/drawzero/utils/input_pygame.py +44 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/key_flags.py +1 -12
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/renderer.py +46 -30
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/renderer_ejudge.py +20 -4
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/screen_size.py +15 -0
- {drawzero-0.5.4 → drawzero-0.7.0/src/drawzero.egg-info}/PKG-INFO +15 -32
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero.egg-info/SOURCES.txt +30 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero.egg-info/requires.txt +1 -2
- drawzero-0.7.0/tests/test_documentation.py +47 -0
- drawzero-0.7.0/tests/test_examples_gui_mode.py +21 -0
- drawzero-0.7.0/tests/test_examples_text_mode.py +16 -0
- drawzero-0.7.0/tests/test_input.py +366 -0
- drawzero-0.7.0/tests/test_input_legacy.py +276 -0
- drawzero-0.5.4/src/drawzero/examples/16_keyboard_and_mouse.py +0 -40
- drawzero-0.5.4/tests/test_examples_gui_mode.py +0 -95
- drawzero-0.5.4/tests/test_examples_text_mode.py +0 -91
- {drawzero-0.5.4 → drawzero-0.7.0}/LICENSE +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/MANIFEST.in +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/hello_world.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_00.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_01.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_02.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_03.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_04.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_05.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_06.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_11.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_12.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/imgs/ex_13.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/keyboard_and_mouse_events.gif +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/planet_animation.gif +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/docs/transparent.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/setup.cfg +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/__main__.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/00_hello_world.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/01_grid_and_coordinates.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/02_loops_and_rgb_colors.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/03_simple_objects.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/04_loops_sin_plot.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/05_points.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/06_turtle_style.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/07_animation_circles.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/08_animation_traffic_light.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/09_animation_rectangles.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/10_animation_planets.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/11_transparency_and_line_width.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/12_images.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/13_gradients.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/14_animation_close_vertex.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/15_animation_firework.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/99_errors.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/__init__.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/examples/cat.png +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/__init__.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/colors.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/converters.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/copy_examples.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/errors.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/gradient.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero/utils/pt.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero.egg-info/dependency_links.txt +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/src/drawzero.egg-info/top_level.txt +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/tests/test_converters.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/tests/test_copy_examples.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/tests/test_errors.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/tests/test_gradient.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/tests/test_i18n.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/tests/test_pt.py +0 -0
- {drawzero-0.5.4 → drawzero-0.7.0}/tests/test_renderer_ejudge.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drawzero
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: A zero-boilerplate canvas drawing framework for Python 3, based on Pygame.
|
|
5
5
|
Author-email: Sergey Shashkov <sh57@yandex.ru>
|
|
6
6
|
License: MIT
|
|
@@ -23,12 +23,12 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.12
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.13
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
26
27
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
27
28
|
Requires-Python: >=3.8
|
|
28
29
|
Description-Content-Type: text/markdown
|
|
29
30
|
License-File: LICENSE
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist: pygame>=2.0.1
|
|
31
|
+
Requires-Dist: pygame-ce>=2.0.1
|
|
32
32
|
Provides-Extra: dev
|
|
33
33
|
Requires-Dist: setuptools; extra == "dev"
|
|
34
34
|
Requires-Dist: build; extra == "dev"
|
|
@@ -263,40 +263,23 @@ text(C.white, 'scale3 = Gradient([C.white, C.black, C.red, C.black, C.white], 20
|
|
|
263
263
|
|
|
264
264
|
# Keyboard and mouse events
|
|
265
265
|
|
|
266
|
-
|
|
266
|
+
Use `keyboard`, `mouse`, and ordered `events()` snapshots prepared by `tick()`.
|
|
267
|
+
See the complete [English input guide](https://drawzero.org/keyboard_and_mouse_input/)
|
|
268
|
+
and [Russian input guide](https://drawzero.org/ru/keyboard_and_mouse_input/).
|
|
267
269
|
|
|
268
|
-
```
|
|
270
|
+
```python
|
|
269
271
|
from drawzero import *
|
|
270
272
|
|
|
271
|
-
|
|
272
|
-
SIZE = 20
|
|
273
|
-
x = y = 500 - SIZE // 2
|
|
274
|
-
|
|
273
|
+
x = y = 500
|
|
275
274
|
while True:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
keys = get_keys_pressed()
|
|
281
|
-
if keys[K.UP] or keys[K.w]:
|
|
282
|
-
y -= 5
|
|
283
|
-
if keys[K.DOWN] or keys[K.s]:
|
|
284
|
-
y += 5
|
|
285
|
-
if keys[K.LEFT] or keys[K.a]:
|
|
286
|
-
x -= 5
|
|
287
|
-
if keys[K.RIGHT] or keys[K.d]:
|
|
288
|
-
x += 5
|
|
289
|
-
# Keyboard events
|
|
290
|
-
for ev in keysdown:
|
|
291
|
-
if ev.unicode:
|
|
292
|
-
upper_text += ev.unicode
|
|
293
|
-
|
|
294
|
-
# Redraw everything
|
|
275
|
+
x += 4 * keyboard.axis(('left', 'a'), ('right', 'd'))
|
|
276
|
+
y += 4 * keyboard.axis(('up', 'w'), ('down', 's'))
|
|
277
|
+
if keyboard.just_pressed('space'):
|
|
278
|
+
x = y = 500
|
|
295
279
|
clear()
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
tick()
|
|
280
|
+
filled_circle(C.red, (x, y), 20)
|
|
281
|
+
filled_circle(C.yellow, mouse.pos, 3)
|
|
282
|
+
tick(fps=60)
|
|
300
283
|
```
|
|
301
284
|
|
|
302
285
|
<img alt="keyboard_and_mouse_events.gif" src="https://raw.githubusercontent.com/ShashkovS/drawzero/master/docs/keyboard_and_mouse_events.gif" width="50%">
|
|
@@ -219,40 +219,23 @@ text(C.white, 'scale3 = Gradient([C.white, C.black, C.red, C.black, C.white], 20
|
|
|
219
219
|
|
|
220
220
|
# Keyboard and mouse events
|
|
221
221
|
|
|
222
|
-
|
|
222
|
+
Use `keyboard`, `mouse`, and ordered `events()` snapshots prepared by `tick()`.
|
|
223
|
+
See the complete [English input guide](https://drawzero.org/keyboard_and_mouse_input/)
|
|
224
|
+
and [Russian input guide](https://drawzero.org/ru/keyboard_and_mouse_input/).
|
|
223
225
|
|
|
224
|
-
```
|
|
226
|
+
```python
|
|
225
227
|
from drawzero import *
|
|
226
228
|
|
|
227
|
-
|
|
228
|
-
SIZE = 20
|
|
229
|
-
x = y = 500 - SIZE // 2
|
|
230
|
-
|
|
229
|
+
x = y = 500
|
|
231
230
|
while True:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
keys = get_keys_pressed()
|
|
237
|
-
if keys[K.UP] or keys[K.w]:
|
|
238
|
-
y -= 5
|
|
239
|
-
if keys[K.DOWN] or keys[K.s]:
|
|
240
|
-
y += 5
|
|
241
|
-
if keys[K.LEFT] or keys[K.a]:
|
|
242
|
-
x -= 5
|
|
243
|
-
if keys[K.RIGHT] or keys[K.d]:
|
|
244
|
-
x += 5
|
|
245
|
-
# Keyboard events
|
|
246
|
-
for ev in keysdown:
|
|
247
|
-
if ev.unicode:
|
|
248
|
-
upper_text += ev.unicode
|
|
249
|
-
|
|
250
|
-
# Redraw everything
|
|
231
|
+
x += 4 * keyboard.axis(('left', 'a'), ('right', 'd'))
|
|
232
|
+
y += 4 * keyboard.axis(('up', 'w'), ('down', 's'))
|
|
233
|
+
if keyboard.just_pressed('space'):
|
|
234
|
+
x = y = 500
|
|
251
235
|
clear()
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
tick()
|
|
236
|
+
filled_circle(C.red, (x, y), 20)
|
|
237
|
+
filled_circle(C.yellow, mouse.pos, 3)
|
|
238
|
+
tick(fps=60)
|
|
256
239
|
```
|
|
257
240
|
|
|
258
241
|
<img alt="keyboard_and_mouse_events.gif" src="https://raw.githubusercontent.com/ShashkovS/drawzero/master/docs/keyboard_and_mouse_events.gif" width="50%">
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "drawzero"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.7.0"
|
|
8
8
|
authors = [
|
|
9
9
|
{ name="Sergey Shashkov", email="sh57@yandex.ru" },
|
|
10
10
|
]
|
|
@@ -30,11 +30,11 @@ classifiers = [
|
|
|
30
30
|
"Programming Language :: Python :: 3.11",
|
|
31
31
|
"Programming Language :: Python :: 3.12",
|
|
32
32
|
"Programming Language :: Python :: 3.13",
|
|
33
|
+
"Programming Language :: Python :: 3.14",
|
|
33
34
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
34
35
|
]
|
|
35
36
|
dependencies = [
|
|
36
|
-
"
|
|
37
|
-
"pygame>=2.0.1",
|
|
37
|
+
"pygame-ce>=2.0.1",
|
|
38
38
|
]
|
|
39
39
|
|
|
40
40
|
[project.urls]
|
|
@@ -5,6 +5,7 @@ A zero-boilerplate canvas drawing framework for Python 3, based on Pygame.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from .utils.draw import *
|
|
8
|
+
from .utils.input import keyboard, mouse, events, M, MOD, E
|
|
8
9
|
from .utils.pt import Pt
|
|
9
10
|
from .utils.gradient import Gradient
|
|
10
11
|
from .utils.copy_examples import copy_examples
|
|
@@ -15,6 +16,7 @@ from .utils.colors import C, COLORS, THECOLORS, ALL_COLORS
|
|
|
15
16
|
from .__about__ import __author__, __copyright__, __version__
|
|
16
17
|
|
|
17
18
|
__all__ = [
|
|
19
|
+
'keyboard', 'mouse', 'events', 'M', 'MOD', 'E',
|
|
18
20
|
# spec
|
|
19
21
|
'__author__', '__copyright__', '__version__',
|
|
20
22
|
#
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from drawzero import *
|
|
2
|
+
|
|
3
|
+
x = y = 500
|
|
4
|
+
color = C.red
|
|
5
|
+
presses = 0
|
|
6
|
+
while True:
|
|
7
|
+
speed = 12 if keyboard.pressed('shift') else 4
|
|
8
|
+
dx = keyboard.axis(('left', 'a'), ('right', 'd'))
|
|
9
|
+
dy = keyboard.axis(('up', 'w'), ('down', 's'))
|
|
10
|
+
x += speed * dx
|
|
11
|
+
y += speed * dy
|
|
12
|
+
if keyboard.just_pressed('space'):
|
|
13
|
+
presses += 1
|
|
14
|
+
color = C.blue if color == C.red else C.red
|
|
15
|
+
for event in events():
|
|
16
|
+
if event.type == E.MOUSE_DOWN and event.button == M.LEFT:
|
|
17
|
+
x, y = event.pos
|
|
18
|
+
clear()
|
|
19
|
+
text(C.white, 'CONTROLS / STATE', (500, 70), 48)
|
|
20
|
+
text(C.white, 'Arrows or WASD move; Shift speeds up', (500, 150), 32)
|
|
21
|
+
text(C.white, 'Space changes color once; click places the square', (500, 205), 30)
|
|
22
|
+
text(C.cyan, f'Axis: ({dx}, {dy}) Shift: {keyboard.pressed("shift")}', (500, 300), 36)
|
|
23
|
+
text(C.yellow, f'Space presses: {presses}', (500, 360), 36)
|
|
24
|
+
filled_rect(color, (x, y), 35, 35)
|
|
25
|
+
filled_circle(C.yellow, mouse.pos, 6)
|
|
26
|
+
tick(fps=60)
|
|
@@ -63,20 +63,20 @@ def draw_stars(stars):
|
|
|
63
63
|
text('white', 'Press WASD or QE to move', (500, 5), 48, '.^')
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
def process_keys(
|
|
66
|
+
def process_keys(speed):
|
|
67
67
|
'''Обрабатываем нажатия клавиш
|
|
68
68
|
Используем WASD для вверх/вниз/влево/вправо и QE для вперёд/назад'''
|
|
69
|
-
if
|
|
69
|
+
if keyboard.pressed(K.UP) or keyboard.pressed(K.w):
|
|
70
70
|
speed[2] += 100
|
|
71
|
-
if
|
|
71
|
+
if keyboard.pressed(K.DOWN) or keyboard.pressed(K.s):
|
|
72
72
|
speed[2] -= 100
|
|
73
|
-
if
|
|
73
|
+
if keyboard.pressed(K.LEFT) or keyboard.pressed(K.a):
|
|
74
74
|
speed[0] += 100
|
|
75
|
-
if
|
|
75
|
+
if keyboard.pressed(K.RIGHT) or keyboard.pressed(K.d):
|
|
76
76
|
speed[0] -= 100
|
|
77
|
-
if
|
|
77
|
+
if keyboard.pressed(K.q):
|
|
78
78
|
speed[1] -= 1
|
|
79
|
-
if
|
|
79
|
+
if keyboard.pressed(K.e):
|
|
80
80
|
speed[1] += 1
|
|
81
81
|
|
|
82
82
|
|
|
@@ -88,10 +88,10 @@ while True:
|
|
|
88
88
|
# Заливаем всё чёрным
|
|
89
89
|
fill((0, 0, 0))
|
|
90
90
|
# Обрабатываем нажатия клавиш
|
|
91
|
-
process_keys(
|
|
91
|
+
process_keys(speed)
|
|
92
92
|
# Двигаем звёзды
|
|
93
93
|
move_stars(stars, speed)
|
|
94
94
|
# Рисуем звёзды
|
|
95
95
|
draw_stars(stars)
|
|
96
|
-
# Ждём 1/
|
|
96
|
+
# Ждём 1/30 секунды
|
|
97
97
|
tick()
|
|
@@ -43,7 +43,9 @@ while True:
|
|
|
43
43
|
elif cur_status == 3:
|
|
44
44
|
text('red', 'Mismatch?', (500, 800), 48)
|
|
45
45
|
# Ignore clicks for half a second after color change
|
|
46
|
-
for ev in
|
|
46
|
+
for ev in mouse.events:
|
|
47
|
+
if ev.type != E.MOUSE_DOWN:
|
|
48
|
+
continue
|
|
47
49
|
if cur_ts - last_status_ts > 0.3:
|
|
48
50
|
if ev.button == cur_status:
|
|
49
51
|
# User confirmed
|
|
@@ -21,15 +21,14 @@ for i in 3, 2, 1:
|
|
|
21
21
|
sleep(1)
|
|
22
22
|
|
|
23
23
|
while True:
|
|
24
|
-
keys = get_keys_pressed()
|
|
25
24
|
for i in range(len(cars_y)):
|
|
26
|
-
if
|
|
25
|
+
if keyboard.pressed(ups[i]):
|
|
27
26
|
cars_y[i] -= 5
|
|
28
|
-
if
|
|
27
|
+
if keyboard.pressed(downs[i]):
|
|
29
28
|
cars_y[i] += 5
|
|
30
|
-
if
|
|
29
|
+
if keyboard.pressed(lefts[i]):
|
|
31
30
|
cars_x[i] -= 5
|
|
32
|
-
if
|
|
31
|
+
if keyboard.pressed(rights[i]):
|
|
33
32
|
cars_x[i] += 5
|
|
34
33
|
clear()
|
|
35
34
|
for i in range(len(cars_y)):
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from drawzero import *
|
|
2
|
+
|
|
3
|
+
segments = []
|
|
4
|
+
previous = None
|
|
5
|
+
while True:
|
|
6
|
+
for event in events():
|
|
7
|
+
if event.type == E.FOCUS_LOST:
|
|
8
|
+
previous = None
|
|
9
|
+
elif event.type == E.MOUSE_DOWN and event.button == M.LEFT:
|
|
10
|
+
previous = event.pos
|
|
11
|
+
elif event.type == E.MOUSE_MOVE:
|
|
12
|
+
if previous is not None and M.LEFT in event.buttons:
|
|
13
|
+
segments.append((previous, event.pos))
|
|
14
|
+
previous = event.pos
|
|
15
|
+
elif event.type == E.MOUSE_UP and event.button == M.LEFT:
|
|
16
|
+
if previous is not None and not event.source.cancelled:
|
|
17
|
+
segments.append((previous, event.pos))
|
|
18
|
+
previous = None
|
|
19
|
+
if keyboard.just_pressed('space'):
|
|
20
|
+
segments.clear()
|
|
21
|
+
clear()
|
|
22
|
+
text(C.white, 'PRECISE DRAWING', (500, 70), 48)
|
|
23
|
+
text(C.white, 'Hold left mouse button to draw; Space clears', (500, 150), 32)
|
|
24
|
+
for start, end in segments:
|
|
25
|
+
line(C.cyan, start, end, line_width=6)
|
|
26
|
+
filled_circle(C.yellow, mouse.pos, 8)
|
|
27
|
+
text(C.gray, f'Path segments: {len(segments)}', (500, 900), 32)
|
|
28
|
+
tick(fps=60)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from drawzero import *
|
|
2
|
+
|
|
3
|
+
value = ''
|
|
4
|
+
scroll_x = scroll_y = 0
|
|
5
|
+
composition = ''
|
|
6
|
+
while True:
|
|
7
|
+
for event in events():
|
|
8
|
+
if event.type == E.TEXT_INPUT:
|
|
9
|
+
value += event.text
|
|
10
|
+
composition = ''
|
|
11
|
+
elif event.type == E.TEXT_EDITING:
|
|
12
|
+
composition = event.text
|
|
13
|
+
elif event.type == E.KEY_DOWN and event.key == K.BACKSPACE:
|
|
14
|
+
value = value[:-1]
|
|
15
|
+
elif event.type == E.FOCUS_LOST:
|
|
16
|
+
composition = ''
|
|
17
|
+
dx, dy = mouse.wheel
|
|
18
|
+
scroll_x += dx
|
|
19
|
+
scroll_y += dy
|
|
20
|
+
clear()
|
|
21
|
+
text(C.white, 'TEXT / TWO-DIMENSIONAL SCROLL', (500, 70), 40)
|
|
22
|
+
text(C.white, 'Type text; Backspace deletes; scroll moves the marker', (500, 150), 28)
|
|
23
|
+
text(C.cyan, value, (80, 300), 48, '<.')
|
|
24
|
+
text(C.gray, composition, (80, 370), 36, '<.')
|
|
25
|
+
text(C.yellow, f'Scroll: ({scroll_x:.1f}, {scroll_y:.1f})', (500, 480), 36)
|
|
26
|
+
line(C.gray, (200, 720), (800, 720))
|
|
27
|
+
line(C.gray, (500, 570), (500, 870))
|
|
28
|
+
filled_circle(C.orange, (500 + 30 * scroll_x, 720 - 30 * scroll_y), 22)
|
|
29
|
+
tick(fps=60)
|
|
@@ -348,13 +348,13 @@ def _update_events_coordinates():
|
|
|
348
348
|
ev.rel = (from_canvas_x(x), from_canvas_y(y))
|
|
349
349
|
|
|
350
350
|
|
|
351
|
-
def tick(r=1):
|
|
352
|
-
"""
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
renderer.draw_tick(r)
|
|
351
|
+
def tick(r=1, *, fps=30):
|
|
352
|
+
"""Present drawing and publish one input frame after r polls.
|
|
353
|
+
|
|
354
|
+
fps limits each poll interval (30 by default; zero is uncapped).
|
|
355
|
+
Positional r remains a poll count, not a frame rate.
|
|
356
|
+
"""
|
|
357
|
+
renderer.draw_tick(r, fps=fps)
|
|
358
358
|
_update_events_coordinates()
|
|
359
359
|
|
|
360
360
|
|
|
@@ -160,6 +160,12 @@ class I18N:
|
|
|
160
160
|
'en': 'Incorrect number of points for the input data: there should be either 2, or exactly as many as there are colors, that is, {}.',
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
+
input_invalid = {'en': 'Invalid key or mouse button: {!r}.', 'ru': 'Некорректная клавиша или кнопка мыши: {!r}.'}
|
|
164
|
+
input_suggestion = {'en': ' Did you mean {!r}?', 'ru': ' Возможно, вы имели в виду {!r}?'}
|
|
165
|
+
input_mask = {'en': 'MOD is a modifier mask; query a key or "ctrl", "shift", "alt", "meta".', 'ru': 'MOD — маска модификаторов; укажите клавишу или "ctrl", "shift", "alt", "meta".'}
|
|
166
|
+
input_group = {'en': 'An axis group must be a nonempty flat tuple/list of keys.', 'ru': 'Группа оси должна быть непустым плоским кортежем/списком клавиш.'}
|
|
167
|
+
input_fps = {'en': 'fps must be a finite nonnegative number.', 'ru': 'fps должен быть конечным неотрицательным числом.'}
|
|
168
|
+
|
|
163
169
|
@classmethod
|
|
164
170
|
def set_lang(cls, lang):
|
|
165
171
|
if lang not in _known_languages:
|