processing / processing/libprocessing
Python sketches are not Pythonic
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 69
- Forks
- 14
- Avg merge
- 15d 22h
- Merged PRs (30d)
- 3
Description
Sorry for the vague title, feel free to update it.
Using https://github.com/processing/processing-examples-mewnala/blob/6e416d80852ee9e147b70ae93cbf8f6dda871ba3/Basics/Structure/Redraw/Redraw.py as an example, a mewnala sketch structure and common techniques has several issues that makes it less ideal as Python code:
- Sharing state between frames requires the use of
global - Even when wildcard import is removed, some variables are injected at the runtime and linters catch them as "undefined":
setupfunction is not meaningful, the same results can be achieved just without. Usingsetupto initialize variables etc. causes even more undefined issues because how scopes work in Python.
As an alternative, a class based approach can solve all these issues:
from mewnala import (
Line,
Sketch as BaseSketch,
)
class Sketch(BaseSketch):
def __init__(self, width=640, height=480):
super().__init__()
self.width = width
self.height = height
def setup(self):
self.size = (self.width, self.height)
self.stroke = 255
self.loop = False
self.y = 180
def draw(self):
self.background = 0
self.y -= 4
if self.y < 0:
self.y = self.height
line = Line(0, self.y, self.width, self.y)
line.draw()
def mouse_pressed(self):
self.redraw()
if __name__ == "__main__":
sketch = Sketch(width=1920, height=1080)
sketch.run()
No more magic imports, no more undefined variables, and now the sketch has a Python-native syntax feel much more natural comparing to the previous version.
I removed the setter function calls too, it's a Java-native pattern and feels weird with Python.
We can go one step further and eliminate the setup() What does it do for the sketch can be covered by __init__ in a class context.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the linked Basics/Structure/Redraw/Redraw.py example and the referenced libprocessing issue #150. Compare the current sketch lifecycle with the proposed class-based approach, then clarify which API changes are in scope and how an updated example would demonstrate completion.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- developer-experience
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100