blog.furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Najprostszy program w Pyglet

Poniżej najprostszy przykład programu w Pyglet pod Python 2.7 i 3.x. Program oprócz wyświetlenia okienka nic nie robi ale to jest minimum jakie potrzeba do uruchomienia programu.

import pyglet

pyglet.window.Window()

pyglet.app.run()

Najpierw importujemy moduł pyglet. Potem tworzymy główne okno Window(), które pojawia się od razu. Na koniec uruchamiamy funkcję run(), która wykonuje się aż do zamknięcia okna (więc instrukcje umieszczone po tej funkcji wykonają się dopiero po zakmnięciu okna) i zapewnia ona obsługę wszelkich zdarzeń zachodzących w oknie - rozpoznawanie ruchu myszki, kliknięć przycisków, kliknięć klawiszy - i przesyłanie tych informacji do elementów (widgetów) wewnątrz okna. Odpowiedzialna jest też za wywoływnaie funkcji przypisanych widgetom przez programistę (np. rekcja na kliknięcie przycisku w oknie) jak i tych przypisanych domyślnie (np. rysowanie widgetów). Wszystko się to dzieje w pętli, która chodzi w nieskończoność.

W Tkinter ta funkcja nazywa się jest mainloop() czyli główna pętla.
W PyGame nie ma takiej funkcji i trzeba samemu ją napisać.
Zwykle ma ona postać nieskończonej pętli obsługującej zdarzenia i potocznie nazywa się właśnie mainloop.

Bez tej funkcji nie da się nawet zamknąć okna.

Stworzone okno warto przypisać do zmiennej aby można było robić z nim coś więcej. W poniższym do okna zostanie przypisana funkcja, która będzie wypisywać w terminalu informacje o zdarzeniach jakie zdarzyły się w oknie. Może to być bardzo przydatne w zapoznaniu się z instniejącymi zdarzeniami.

import pyglet

window = pyglet.window.Window()

window.push_handlers(pyglet.window.event.WindowEventLogger())

pyglet.app.run()

Można jednak przypisać takie rzeczy jak wielkość i tytuł okna

import pyglet

window = pyglet.window.Window()
window.set_caption("Pyglet Minimum")
window.set_size(300,200)

pyglet.app.run()

Wartości można podawać także jako parametry przy tworzeniu obiektu a potem ewentualnie zmieniać jak powyżej. Są też takie, które można podać jedynie przy tworzeniu obiektu i potem możne jedynie odczytac ich stan ale nie można już ich zmienić np. resizable.

import pyglet

window = pyglet.window.Window(300, 200,
                caption="Pyglet Minimum",
                resizable=True
            )

print "Tytul:", window.get_caption()
print "Rozmiar:", window.get_size()
print "Czy rozciagalne:", window.resizable

pyglet.app.run()

Wartość visible warto podać już przy tworzeniu jeśli chcemy aby już na starcie było niewydoczne.

import pyglet

window = pyglet.window.Window(visible=False)

pyglet.app.run()

W powyższej postaci okno nie pojawi się i nie będzie możliwości jego pokazania i zamknięcia.

Pyglet pozwala stworzyć kilka okien (czego nie potrafi PyGame)

import pyglet

window1 = pyglet.window.Window(caption='Okno #1')
window1.set_location(0, 0)

window2 = pyglet.window.Window(caption='Okno #2')
window2.set_location(300, 300)

pyglet.app.run()

Dostępne metody i argumenty okna można zobaczyć w dokumentacji: Window Class lub na szybko podejrzeć dzięki dir()

import pyglet

window = pyglet.window.Window()

print dir(window)

pyglet.app.run()

lub bardziej czytelnie umieszczając w osobnych liniach dzięki join()

import pyglet

window = pyglet.window.Window()

print "\n".join(dir(window))

pyglet.app.run()

ewentualnie bez tworzenia okna

import pyglet

print '\n'.join(dir(pyglet.window.Window))
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury