|
Rozdział 9: Przykłady praktycznego zastosowania
Graficzny interfejs użytkownika(GUI) oraz Sockets.
Lekcje samouczka pokazują podstawy programowania w Pythonie, a przykłady z których korzystaliśmy nie było zbytnio skomplikowane. W związku z tym na zakończenie kursu należałoby powiedzieć coś o programowaniu bardziej zaawansowanym.
Python ma bardzo wiele zalet, takich jak:
- przenoszalność kodu,
- przejrzysta składnia,
- pełny zakres typów zmiennych i kolekcji,
- klasy (OO),
- GUI (Tkinter),
- sockets.
Na tych dwóch ostatnich się zatrzymamy.
GUI
Dzięki możliwości obsługi przez Pythona graficznego interfejsu użytkownika możliwa jest obróbka graficzna, a także tworzenie obiektów graficznych. Przykładem może być poniższy obrazek.
Z lewej strony mamy gotowy obrazek, który jest niezbyt ostry. Dzięki odpowiedniemu programowi możemy uzyskać lepszy efekt, który widoczny jest po prawej stronie.
Uzysujemy to dzięki następującym poleceniom:
# histogram equalization
import operator
def equalize(h):
lut = []
for b in range(0, len(h), 256):
# step size
step = reduce(operator.add, h[b:b+256]) / 255
# create equalization lookup table
n = 0
for i in range(256):
lut.append(n / step)
n = n + h[i+b]
return lut
Sockets
Sockets są używane w sieci. Dzięki nim możliwa jest komunikacja sieciowa pomiędzy klientem a serwerem. Konwersacja pomiędzy socketem klienta i socketem serwera odbywa się na zasadzie "peer to peer". Normalnie połączenie sockets rozpoczyna konwersacje. Polega to na przesyłanie różnych informacji i odpowiadaniu na zadane pytania. Protokół taki jak HTTP używa sockets tylko do transferu.
Poniżej przedstawione są dwa programy, dla klienta i dla serwera, które umożliwiają ich połaczenie.
Dla serwera
# Echo server program
from socket import *
HOST = 'localhost'#Symboliczna nazwa oznaczająca local host
PORT = 50007
s = socket(AF_INET, SOCK_STREAM)
s.bind(HOST, PORT)
s.listen(1)
print 'Oczekuje na odpowiedz'
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
print ' ',data
conn.send(data)
conn.close()
Dla klienta
# Echo client program
from socket import *
HOST = '127.0.0.1' # Odległy Host
PORT = 50007 # Ten sam port używany dla serwera
s = socket(AF_INET, SOCK_STREAM)
s.connect(HOST, PORT)
komunikat='To co tygryski lubia najbardziej'
print ' ',komunikat
s.send(komunikat)
data = s.recv(1024)
s.close()
print ' ',data
|
|