Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛЕКЦИЯ 8

.pdf
Скачиваний:
26
Добавлен:
26.03.2016
Размер:
1.03 Mб
Скачать

ЛЕКЦИЯ 8. Организация взаимодействия с пользователем. Интерфейсы. Web-разработка.

1. GUI-приложения. 2.Tkinter.

2.1.Пример.

3.wxPython.

3.1.Надстройки wxPython. 4.PyQt.

5.PyGTK.

6.Jython.

7.IronPython.

8.Полнофункциональные интернет-приложения (Rich Internet Applications, RIA). 9.Сбор данных в Web с помощью mechanize и Beautiful Soup.

Рекомендуемая литература:

Марк Лутц - Программирование на Python, 4-е издание, I том, 2011

GUI (Graphical User Interface)

1.GUI-приложения.

Общая схема работы GUI (Graphical User Interface) :

создаётся бесконечный цикл опроса (ожидания) событий (главный цикл), порождаемых действиями пользователя (ввод с клавиатуры, перемещение указателя или нажатие кнопки мыши и т.д.);

для каждого потенциально возможного (обрабатываемого) события назначается функция обратного вызова (callback функция), которая будет вызываться при наступлении этого события (обработчик события);

при возникновении событий, для которых не были назначены обработчики, они будут игнорироваться;

на каждом "витке" главного цикла приложения анализируются наступившие (со времени предыдущего "витка") события, и для каждого такого события вызывается его обработчик, если ожидающих событий несколько, то они обрабатываются в порядке очереди;

всякий GUI-инструмент имеет некоторый набор графических компонентов (виджетов - widget) и средства для компоновки таких виджетов в окне приложения, а каждый из компонентов имеет свой специфический набор событий, которые он может генерировать;

Такой подход называется событийно управляемым программированием (event driven programming). Все GUI приложения, независимо от используемой графической технологии, будут использовать этот общий шаблон.

Примечание. Внешний вид одного и того же GUI-приложения может отличаться при запуске в разных средах (операционных системах, менеджерах рабочего стола, оконных менеджерах). Это обусловлено тем, что фактическую прорисовку виджетов обеспечивают не графические библиотеки, а оконный менеджер графической системы.

1.GUI-приложения.

Ещё одной привлекательной особенностью Python является простота, скорость и гибкость в создании приложений с GUI. Это преимущество связано не только с большим количеством поддерживаемых графических библиотек: Tkinter, PyQt, PyGTK, wxPython, Pygames и др.

Основная причина заключается в интерпретирующей природе платформы Python, так как из-за доступности Python-кода внешний вид графического приложения всегда можно изменить или дополнить.

Python предлагает:

независимость от платформы: графическое приложение, разработанное на Python в одной ОС (например, Linux) будет с большой степенью вероятности адекватно работать в любой другой среде (Windows, MacOS, Solaris, FreeBSD, …) или потребует для этого незначительных доработок;

GUI-приложения в основном являются диалоговыми, т.е. предназначенными для взаимодействия с пользователем, при этом скорость работы приложения определяется действиями пользователя, и здесь исчезает один из основных формальных недостатков

Python — его замедленность по сравнению с C или C++;

из-за простоты интеграции Python с C/C++, визуальные компоненты проекта (GUI) могут быть написаны на Python с учётом скорости разработки, а внутренние процедуры для обработки данных — на C/C++ .

2.Tkinter.

Библиотека для разработки GUI, ставшая де-факто стандартом для разработки переносимых GUI на языке Python. Она может легко расширяться программным кодом на языке Python, а также имеет множество дополнительных пакетов, таких как

Pmw (сторонняя библиотека виджетов);

Tix (еще одна библиотек виджетов, ныне ставшая стандартной частью Python);

PIL (расширение для обработки изображений);

ttk (библиотека виджетов Tk, поддерживающих темы оформления).

Библиотека Tk, на которой основана библиотека tkinter, является стандартом в мире открытого программного обеспечения в целом и используется также языками сценариев Perl, Ruby, PHP, Common Lisp и Tcl, благодаря чему количество пользователей этой библиотеки может исчисляться миллионами.

tkinter – зрелая, надежная, широко используемая и хорошо документированная библиотека. Она включает около 25 основных типов виджетов, а также различные диалоги и другие инструменты.

Несмотря на простоту библиотеки tkinter, ее текстовые и графические виджеты обеспечивают достаточно широкие возможности для реализации веб-страниц, трехмерных изображений и анимации.

2.1.Пример.

#!/usr/bin/python3

# -*- coding: utf-8 -*- from sys import argv import random import math

from tkinter import *

val_range = 0 # диапазон числа secret = 0 # угадываемое число guesses = 0 # число попыток limits = 0 # макс. число попыток

def new_game():

global secret, guesses, limits msg[ 'text' ] = ' ' * 100 + \

'\nНовая игра, диапазон: [ 0...{} )\n'.format( val_range ) secret = random.randrange( 0,val_range )

guesses = 0

limits = int( math.ceil( math.log( val_range, 2 ) ) )

def input_guess( event ): global guesses

if guesses < 0 : # признак завершённой игры msg[ 'text' ] += 'Начните новую игру...\n' ent.delete( 0, END )

return

2.1.Пример.

try :

 

 

 

value = int( ent.get() )

 

 

except ValueError:

 

root = Tk()

 

msg[ 'text' ] += 'Ошибка: значение должно быть

root.title( 'Угадай число!' )

# окно приложения

целочисленным!\n'

 

root.geometry( '500x240' )

 

ent.delete( 0, END )

Label( root, text='Вводите следующее число...' ).pack( side=TOP )

return;

 

ent = Entry( root, width=10 )

# поле ввода

ent.delete( 0, END )

 

ent.pack( side=TOP )

 

guesses += 1

 

ent.focus() # избавить от необходимости выполнять щелчок мышью

if value < secret :

 

для фокуса

 

msg[ 'text' ] += '{} - это меньше ...\n'.format( value )

ent.bind( '<Return>', input_guess )

elif value > secret :

 

Button( root, text=' Новая игра ',

msg[ 'text' ] += '{} - это больше ...\n'.format( value )

command=new_game ).pack( side=BOTTOM )

else :

 

msg = Message( root, bg='white', fg='black', width=400, borderwidth=0 )

msg[ 'text' ] += 'Игрок выиграл!\n'

msg.pack( side=TOP )

# окно результата

guesses = -1

# признак завершённой игры

 

 

return

 

val_range = ( len( argv ) > 1 and int( argv[ 1 ] ) ) or 100 # параметр -

if guesses >= limits :

 

диапазон

 

msg[ 'text' ] += 'Компьютер выиграл! Загадно было

new_game()

 

{}\n'.format( secret )

# признак завершённой игры

root.mainloop()

 

guesses = -1

 

 

return

 

 

 

3.wxPython.

Интерфейс Python к библиотеке wxWidgets с открытыми исходными текстами, которая представляет собой переносимую структуру классов GUI, первоначально созданную для использования из программ на языке C++. Система wxPython является модулем расширения, служащим оболочкой для классов wxWidgets. Эта библиотека превосходно подходит для создания сложных интерфейсов и сегодня является, вероятно, вторым по популярности инструментом создания графических интерфейсов в Python после tkinter. Графические интерфейсы, созданные с применением wxPython, переносимы на Windows и Unix-подобные платформы и Mac OS X.

Поскольку интерфейс wxPython опирается на библиотеку классов C++, многие полагают, что он более сложен в использовании, чем библиотека tkinter: он предоставляет доступ к сотням классов, для чего требуется прибегать к ООП. Применение wxPython часто требует от программистов писать больше программного кода, отчасти потому, что этот интерфейс обладает более широкими функциональными возможностями, а отчасти потому, что именно такой образ мышления он унаследовал от библиотеки C++, лежащей в его основе.

Кроме того, часть документации wxPython ориентирована на программистов, использующих язык C++. В обмен на повышенную сложность библиотека wxPython обеспечивает набор мощных инструментов. В состав wxPython входит более богатый набор виджетов, чем в библиотеку tkinter, включая деревья и компоненты просмотра HTML – чтобы получить такие же компоненты при использовании tkinter, может потребоваться задействовать такие расширения, как Pmw, Tix или ttk.

3.1.Надстройки wxPython.

PythonCard. Построитель и библиотека GUI с открытыми исходными текстами, реализованные поверх wxPython.

Считается одним из самых близких Python-эквивалентов того вида построителей GUI, которые хорошо знакомы разработчикам на Visual Basic.

PythonCard позиционируется разработчиками, как конструктор GUI для создания на языке Python кроссплатформенных приложений, способных выполняться в Windows, Mac OS X и Linux.

Dabo. Построитель графических интерфейсов с открытыми исходными текстами, также реализованный на основе wxPython, но не только.

Dabo – это переносимый, трехуровневый, кроссплатформенный фреймворк для разработки настольных приложений на языке Python, созданный по образу и подобию Visual FoxPro.

Трехуровневая организация обеспечивает возможность доступа к базе данных, реализации бизнес-логики и пользовательского интерфейса.

Открытая архитектура способна поддерживать различные типы баз данных и механизмов создания графических интерфейсов (wxPython, tkinter и даже HTML через HTTP).

4.PyQt.

Интерфейс Python к библиотеке Qt (ныне принадлежит Nokia, ранее принадлежала компании Trolltech), занимающей, пожалуй, третье место среди наиболее часто используемых инструментов GUI для Python.

PyQt – это полноценная библиотека создания графических интерфейсов, которая на сегодняшний день переносима в Windows, Mac OS X, Unix и Linux. Она зародилась и выросла в Linux, но со временем была перенесена и на другие системы.

Подобно wxPython, библиотека PyQt в целом более сложна в использовании, чем tkinter, и при этом обладает более богатыми возможностями – она содержит сотни классов и тысячи функций и методов.

Самым важным, пожалуй, недостатком Qt в прошлом считалась неполная открытость библиотеки для коммерческого использования. Сегодня библиотека Qt распространяется не только под коммерческой лицензией, но и под открытыми лицензиями GPL и LGPL.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]