![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
~ pygame for humans [ docs | gallery ]
Supports pygame / pygame-ce
pip install hooman
demos
python -m hooman.demos # see all demos
python -m hooman.demos.sliders # select one
join discord: https://discord.gg/Q23ATve
The package for clearer, shorter and cleaner PyGame codebases!
Featured by r/Pygame
Fun fact: Codementor.io tweeted about Hooman tagged #LearnPython #100DaysOfCode
hooman makes developing with pygame easy by having everything in 1 object!
from hooman import Hooman
hapi = Hooman(width, height)
while hapi.is_running:
hapi.flip_display()
hapi.event_loop()
You can use the jurigged package to reload your code while you update your file. The latter will give you a quick visual feedback while coding.
jurigged hooman/hooman/demos/sketch_pad.py
hapi.WIDTH
is gives the width of the screenhapi.HEIGHT
is gives the height of the screenstill exposes a screen to draw with any pygame shape
pygame.draw.arc(hapi.screen, (255, 0, 0), [80,10,200,200], hapi.PI, hapi.PI/2, 2)
The value of pi as provided by the maths module
pygame.draw.arc(hapi.screen, (255, 0, 0), [80,10,200,200], hapi.PI, hapi.PI/2, 2)
hapi.fill((100, 100, 100))
for r g bhapi.fill(100)
same as hapi.fill((100, 100, 100))
hapi.stroke((100, 100, 100))
for r g bhapi.stroke(100)
same as hapi.stroke((100, 100, 100))
hapi.background((100, 100, 100))
for r g bhapi.background(100)
same as hapi.background((100, 100, 100))
hapi.set_background((100, 100, 100))
hapi.background((100, 100, 100))
same as
{
'red': (255, 0, 0),
'green': (0, 255, 0),
'blue': (0, 0, 255),
'black': (0, 0, 0),
'white': (255, 0, 0),
'yellow': (255, 255, 0),
'grey': (100, 100, 100)
}
also .colors
, .colours
, .colour
same
hapi.stroke_size(size)
where size is an inthapi.no_stroke()
hapi.stroke_size(0)
hapi.font_size(12)
hapi.rect(x, y, width, height)
hapi.ellipse(x, y, width, height)
hapi.line(x1, y1, x2, y2)
.text(letters, x, y)
hapi.text(5, 10, 10)
is validhapi.text(hapi.mouseX(), 10, 10)
is valid out of the box.polygon(coords, fill=True)
False
, only the outline will be drawn.stroke_size
hapi.begin_shape()
starts drawing a polygon
.vertex((100, 200))
hapi.end_shape(fill=True)
draws polygon on closing
Minimal demo of .begin_shape
, .vertex
and .end_shape
from hooman import Hooman
import pygame
hapi = Hooman(500, 500)
def handle_events(event):
if event.type == pygame.QUIT:
hapi.is_running = False
hapi.handle_events = handle_events
while hapi.is_running:
hapi.background(hapi.color['white'])
hapi.fill(hapi.color['blue'])
hapi.stroke_size(4)
hapi.begin_shape()
hapi.vertex((0, 0))
hapi.vertex((100, 0))
hapi.vertex((hapi.mouseX(), hapi.mouseY()))
hapi.end_shape()
# same as hapi.polygon([(0, 0), (100, 0), (hapi.mouseX(), hapi.mouseY())])
hapi.flip_display()
hapi.event_loop()
pygame.quit()
.heart(x, y, w, h)
.star(x, y, r1, r2, npoints)
.curve_rect(x, y, w, h, curve)
.arrow(x, y, w, h)
.alpha_ellipse(x, y, w, h)
.regular_polygon(x, y, w, h, npoints, angle_offset)
.supershape(x, y, w, h, options)
note this is a preset for supershape
.smooth_star(x, y, w, h, n1=0.20, fill=False)
note this is a preset for supershape
.oil_drop(x, y, w, h, n1=0.3, fill=False)
note this is a preset for supershape
.flowing_star(x, y, w, h, n1=0.3, fill=False)
.gradient_rect(x, y, w, h, start_col, end_col, direction=0)
.cross_hair(coord)
hapi.mouseX()
gives the current x coordinate of the mousehapi.mouseY()
gives the current y coordinate of the mousepygame.display.flip()
behind the scenerequires
def handle_events(event):
if event.type == pygame.QUIT:
hapi.is_running = False
hapi.handle_events = handle_events
hapi.is_running
loopsame as pygame.display.set_caption
hapi.is_running
loopwhile hapi.is_running:
for i in range(5):
x = hapi.button(10+i*80, hapi.mouseY(), "Click Me",
grey_style
)
hapi.update_ui()
Create a button with hapi.button(x, y, w, h, text, [optional paramters])
x
- x location of the buttony
- y location of the buttonw
- width of the buttonh
- height of the buttontext
- the text on the button[optional parameters]
- a dictionary of any extra options you want for the button listed below "hover_background_color": None
"outline": False
"outline_thickness": 0
"hover_outline_thickness": None
"outline_color": (0, 0, 0)
"outline_half": False
"hover_image": None
"enlarge": False
"enlarge_amount": 1.1
"calculate_size": False
"dont_generate": False
"padding_x": 0
"padding_y": 0
all options from Base Ui Widget
plus all parameters from Base Widget
def on_hover_enter(btn):
btn.background_color = hapi.color['blue']
button = hapi.button(150, 250, "Click Me",
{'on_hover_enter':on_hover_enter}
)
update()
-> bool - this updates the button and draws it on screen, this should be called every frame, return whether the button was clickedUpdate_text(text)
- this changes the text and recreates the buttoncreate_button()
- this applies any changes to the button.slider(x, y, w, h, [optional parameters])
x
- x coordinatey
- y coordinatew
- widthh
- height "slider_width": None
"slider_color": (200, 200, 200)
"starting_value": None
"range": [0, 1]
"slider_height": None
"step": 0
"direction": "horizontal"
"slider_image": None
"slider_curve": 0
plus all parameters from Base Widget
update()
-> float - this updates the slider and draws it on screen, this should be called every frame, return the valuevalue()
- this returns the current value of the sliderset_value(value)
- given a integer or float, this sets the value and moves the slider.slider_with_text(slider, [optianl parameters])
slider
- a .slider
widget "font": "calibri"
"font_size": 20
"font_color": (0, 0, 0)
"padding_y": 2
"padding_x": 0
"pivot": "top_left"
"accuracy": 0
plus all parameters from Base Widget
update()
- this updates the text and the given slidervalue()
- this returns the value of the given slider.scroll([optional parameters])
"starting_x": 0
"starting_y": 0
"range_x": 0
"range_y": 0
"bar_color": (200, 200, 200)
"slider_color": (150, 150, 150)
-update()
- this updates the scroll widget
scroll_widget[0]
to get the amount of horizontal scroll and
scroll_widget[1]
to get the amount of vertical scrolleg.
scroll_obj = hapi.scroll(params)
while hapi.running:
hapi.rect(100 + scroll_obj[0], 100 + scroll_obj[1], 50, 50)
scroll_obj.update()
.textbox(x, y, w, h=0, [optional parameters])
x
- x coordinatey
- y coordinatew
- widthh
- height of each line "max_lines": 1
"text": "" # this can be a list containg a string of each line or a single string containing '\n's
"padding_x": 2
"padding_y": 2
"cursor": True
"on_return": None
"calculate_size": False
"typing": True
update()
- this updates the textbox and draws it on screen, this should be called every frameget_lines(lines=1, return_as_string=False)
- this returns the text in the textbox, lines can be the line number (starting from 1) or a range of lines eg. (1,4)
gets lines 1 to 4, when return_as_string is False, it will return each line in a listkey_down(event)
- when a KEYDOWN event happens, giving it to this method updates the textboxdef handle_events(event):
if event.type == pygame.KEYDOWN:
my_textbox.keydown(event)
these are all optianl parameters and methods that all widgests have
"background_color": (255, 255, 255)
"surface": None
"on_click": None
"on_hover": None
"on_hold": None
"on_release": None
"on_enter": None
"on_exit": None
"image": None
"curve": 0
"font_colour": (0, 0, 0)
"font": "Calibri"
"font_size": 30
"center": False
get_rect()
-> pygame.Rectparams = {
"ticks_y": 10,
"tick_size": 5,
"range_y": [0, 100],
"data": {"a": 10, "b": 20},
"bin_color": (255, 99, 97),
"line_color": (200, 200, 200),
"text_color": (100, 100, 100),
"mouse_line": False,
}
hapi.barchart(x, y, w, h, params)
params = {
"ticks_y": 10,
"ticks_x": 10,
"tick_size": 5,
"range_y": [0, 100],
"range_x": [0, 100],
"lines":[{
"label": "---",
"color": (255, 0, 0),
"data": [[1,1]],
"values_window": 200
}],
"labels": ["apple", "", "", "tree"],
"line_color": (200, 200, 200),
"text_color": (100, 100, 100),
"mouse_line": False,
"mouse_line_color": (255, 0, 0),
"graph_color": (0, 0, 0),
"show_axes": True,
"show_ticks_x": True,
"show_ticks_y": True,
"x_axis_label": "x_axis_label",
"y_axis_label": "y_axis_label",
"plot_background": True,
"plot_grid": True,
"plot_background_color": (234,234,242),
"plot_grid_color": 255
}
hapi.linechart(x, y, w, h, params)
params = {
"ticks_y": 10,
"ticks_x": 10,
"tick_size": 5,
"range_y": [0, 100],
"range_x": [0, 100],
"data": {
"carat": [0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23],
"cut": ["Ideal", "Premium", "Good", "Premium", "Good", "Very Good", "Very Good", "Very Good", "Fair"],
"color": ["E", "E", "E", "I", "J", "J", "I", "H", "E", "H"],
"clarity": ["SI2", "SI1", "VS1", "VS2", "SI2", "VVS2", "VVS1", "SI1", "VS2", "VS1"],
"depth": [61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4],
"table": [55, 61, 65, 58, 58, 57, 57, 55, 61, 61],
"price": [326, 326, 327, 334, 335, 336, 336, 337, 337, 338],
"x": [3.95, 3.89, 4.05, 4.2, 4.34, 3.94, 3.95, 4.07, 3.87, 4],
"y": [3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05],
"z": [2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39]
},
"hue": None,
"hue_order": [],
"size": None,
"text_color": (100, 100, 100),
"mouse_line": False,
"mouse_line_color": (255, 0, 0),
"graph_color": (0, 0, 0),
"show_axes": True,
"show_ticks_x": True,
"show_ticks_y": True,
"x": "price",
"y": "carat",
"plot_background": True,
"plot_grid": True,
"plot_background_color": (234,234,242),
"plot_grid_color": 255,
"line_color": 200,
"strong_color": (107, 107, 255),
"light_color": (235, 235, 255),
"type": "normal",
"kind": "rect",
"hist_color": "b",
"hist_color_invert": False
}
FAQs
Pygame for humans
We found that hooman demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.