Python для обеспечения географических исследований Лекция 5

advertisement
Python для обеспечения
географических исследований
Лекция 5
Сегодня на повестке дня:
Смотрим на решение домашних задачек
Некоторые полезные функции
Графический интерфейс для приложений Python. PyQt4
2
def fact (x):
i=1
factorial = 1
while (i <= x):
factorial = factorial * i
i=i+1
return factorial
print 'Enter number:'
a = input()
print fact(a)
3
import math
def listSum (x):
s = 0.0
for i in x:
s=s+i
return s
def listOtklonsSrKv (x):
otklKvSum = 0.0
otklons = listOtklons (x)
for i in otklons:
otklKvSum = otklKvSum +
i*i
return math.sqrt(otklKvSum/len(x))
def listSredn (x):
return listSum(x) / len(x)
def listOtklons (x):
otkl = []
for i in x:
print 'Enter numbers:'
l = input ()
print listOtklonsSrKv(l)
otkl.append(i-listSredn(x))
return otkl
4
import math
import mylib
print 'Enter numbers:'
l = input ()
print mylib.listOtklonsSrKv(l)
5
f = open("text.txt","r")
for line in f:
print line[3:7]
6
import mylib
print 'Enter file name'
fileName = input()
f = open (fileName,'r')
a = []
for line in f:
a.append(int(line))
print mylib.listOtklonsSrKv(a)
7
Библиотека OS
os.listdir(path=".") - список файлов и директорий в папке
Очень полезно, чтобы циклом пройти по всем файлам в папке.
При применении мы получаем список всех имён как трок
import os
a = os.listdir("C:/")
print a
8
os.getcwd() - текущая рабочая директория.
os.mkdir(path, mode=0o777, *, dir_fd=None) - создаёт директорию.
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) - переименовывает
файл или директорию из src в dst.
9
Библиотека SYS
От неё обычно нужно только одно, но очень важное: получение аргументов
командной строки.
sys.argv - список аргументов командной строки, передаваемых сценарию
Python. sys.argv[0] является именем скрипта.
import sys
print sys.argv
10
Обычно пользователю удобно передавать в качестве аргументов командной
строки пути до файлов, какие-то настройки и т.д.
import sys
f = open (sys.argv[1],'r')
for line in f:
print line
11
Библиотека list
Множество полезных функций работы со списками
list.append(x) Добавляет элемент в конец списка
list.extend(L) Расширяет список list, добавляя в конец все элементы списка L
list.insert(i, x) Вставляет на i-ый элемент значение x
list.remove(x) Удаляет первый элемент в списке, имеющий значение x
list.pop([i]) Удаляет i-ый элемент и возвращает его. Если индекс не указан,
удаляется последний элемент
list.index(x, [start [, end]]) Возвращает положение первого элемента от start до
end со значением x
ist.count(x) Возвращает количество элементов со значением x
12
list.sort([key = функция]) Сортирует список на основе функции
list.reverse() Разворачивает список
a = [1,6,8,2,100,102]
a.sort()
print a
a = [1,6,8,2,100,102]
b = a.index(2)
print b
При отсутствии вернет ошибку NotInList –
нужно обрабатывать исключение
13
Ключевое слово in в логических выражениях позволяет узнавать, есть ли
интересный нам элемент в списке
if a in list:
<инструкции>
if 3 in [4,7,3,2,6]:
print ‘Obvious!’
14
Стандартная работа со строками
S1 + S2
Конкатенация (сложение строк)
S1 * 3
Повторение строки
S[i]
Обращение по индексу
S[i:j:step]Извлечение среза
len(S)
Длина строки
15
str in S
Проверка на вхождение подстроки в строку
S.find(str, [start],[end])
Поиск подстроки в строке. Возвращает номер
первого вхождения или -1
S.rfind(str, [start],[end])
Поиск подстроки в строке. Возвращает номер
последнего вхождения или -1
a = "Somewhere in time"
print a.find("time")
16
S.replace(шаблон, замена)
Замена шаблона
S.split(символ)
Разбиение строки по разделителю
a = "MSU is best university in the world. I love MSU"
b = a.replace ("MSU","SPSU")
print b
a = "SPSU is best university in the world. I love SPSU. Great!"
b = a.split(".")
print b
17
Проверка состояния строки
S.isdigit()
Состоит ли строка из цифр
S.isalpha()
Состоит ли строка из букв
S.isalnum()
Состоит ли строка из цифр или букв
S.islower()
Состоит ли строка из символов в нижнем
регистре
S.isupper()
Состоит ли строка из символов в верхнем
регистре
S.isspace()
Состоит ли строка из неотображаемых
символов (пробел, символ перевода
страницы ('\f'), "новая строка" ('\n'), "перевод
каретки" ('\r'), "горизонтальная табуляция"
('\t') и "вертикальная табуляция" ('\v'))
S.istitle()
Начинаются ли слова в строке с заглавной
буквы
S.upper()
Преобразование строки к верхнему регистру
S.lower()
Преобразование строки к нижнему регистру
18
До сих пор мы с вами делали только консольные приложения.
Ясно, что обычно приходится сталкиваться с графическими интерфейсами
(окошками с кнопочками).
19
Что такое графический интерфейс?
Некоторое множество визуальных компонентов
Компоненты эти:
позволяют с собой взаимодействовать (заполнить текстовое поле и т.п.)
реагируют на действия (нажатие кнопки мыши и т.п.)
взаимодействуют между собой (нажатие кнопки меняет текст)
Примеры компонентов:
20
Язык сам по себе не управляет визуальными формами операционной системы,
эту задачу решают специальные фреймворки.
Для Python их довольно много, несколько десятков, разной мощности и удобства:
…
AVC
Dabo
Tkinter (standart)
WxPython
PyQt
…
https://wiki.python.org/moin/GuiProgramming
21
Мы посмотрим на один из самых мощных фреймворков: PyQt.
PyQt работает на всех платформах, поддерживаемых Qt: Linux и другие UNIXподобные ОС, Mac OS X и Windows. Существует 2 версии: PyQt5,
поддерживающий Qt 5, и PyQt4, поддерживающий Qt 4. PyQt
распространяется под лицензиями GPL (2 и 3 версии) и коммерческой.
PyQt практически полностью реализует возможности Qt. А это более 600
классов, более 6000 функций и методов, включая:
Существующий набор виджетов графического интерфейса;
стили виджетов;
доступ к базам данных с помощью SQL (ODBC, MySQL, PostgreSQL, Oracle);
парсер XML;
поддержку SVG;
интеграцию с WebKit, движком рендеринга HTML;
поддержку воспроизведения видео и аудио.
22
23
PyQt устанавливается для Windows как обычное приложение (.exe) в папку
C:\Python27\Lib\site-packages\PyQt
Там находятся все необходимые утилиты и вспомогательные приложения.
После установки PyQt становится автоматически виден питону:
import PyQt4
В Linux:
sudo apt-get install python-qt4 pyqt4-dev-tools
24
Работа с подобными фрейморками часто строится на непрерывном использовании
технической документации и поисковых систем, поскольку совершенно бесполезно
пытаться запомнить структуру (свойства и методы) всех компонентов, синтакис
конструкций реакции на действия и т.д.
Попробуем посмотреть!
25
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('PyQt4 sample')
widget.show()
sys.exit(app.exec_())
26
Мы подключаем модуль sys – для получения аргументов командной строки и
модуль QtGui – для работы с виджетами.
Каждое приложение написанное на PyQt4, должно создавать
объект QApplication. Далее мы создаем объект приложения и в конструкторе ему
передаем аргументы командной строки. Эти аргументы специфичны только для
приложений написанных на PyQt4. Класс QApplication находится в модулеQtGui.
Далее создаём обычный пустой виджет. QWidget – это основной GUI-класс в
PyQt4. Так как мы создаем виджет без параметров(без родителя), то он не
является потомком и это значит что он станет независимым окном.
Задаем виджету(окну) размер 250×150, где 250 – ширина, а 150 высота.
Далее мы задаём заголовок для нашего окна.
Делаем виджет видимым.
Последняя строка является вызовом главного цикла программы(MainLoop), т.е. с
этой строки программа начнет принимать события(сигнал закрытия окна, клик
мышью и т.д.).
27
Теперь попробуем добавить компоненты. Начнем с простой кнопки.
Всё значительно усложняется.
import sys
from PyQt4 import QtGui, QtCore
class WithQuitButton(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 200, 100)
self.setWindowTitle(self.trUtf8('Окно с кнопкой'))
quit = QtGui.QPushButton(self.trUtf8('Выход!'), self)
quit.setGeometry(10, 10, 60, 35)
self.connect(quit, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
app = QtGui.QApplication(sys.argv)
qb = WithQuitButton()
qb.show()
sys.exit(app.exec_())
28
В PyQt4 все события(нажатие кнопки, ввод текста и т.д.) реализуются
через концепцию сигналов и слотов, т.е. если хотите обработать клик по
кнопке, то вам необходимо соединить сигнал «клик» с необходимым
слотом. Слотом может являться обычная функция или встроенная
функция(например выход «quit»). Соединение происходит через
функцию
QtCore.QObject.connect,
а
разъединение
через QtCore.QObject.disconnect.
29
30
Для рисование интерфейсов не в коде, PyQt4 поставляется вместе с графическим
редактором: QtDesigner
Живет в C:\Python27\Lib\site-packages\PyQt4\designer.exe
31
Оно позволяет собирать оконные интерфейсы почти что мышкой. Задавать
им свойства, наполнять чем-то и т.д.
Из QtDesigner формы сохраняются в файл .ui
Его нужно сконвертировать в .py с помощью специальной утилиты pyuic4.bat
C:\Python27\Lib\site-packages\PyQt4\pyuic.bat
Командой
C:\Python27\Lib\site-packages\PyQt4\pyuic.bat interface.ui –o interface.py
Затем этот interface.py можно подключать к своим сценариям.
32
Н.А. Прохоренок — PyQt. Создание оконных приложений на Python 3
33
Спасибо за внимание!
e.kazakov@spbu.ru
ekazakov.info/students
34
Download