PyGTK SQLAlchemy писане на филмов каталог

Отдавна исках да изпробвам Python като инструмент за разработване на приложения за настолни компютри. Избор на GUI библиотека от наличните GTK, QT, wxPython и Tkinter не беше трудно, защото моят работен плот е ГНОМ и както знаете, той е изграден върху GTK +, тогава реших да спра на PyGTK - слоеве между GTK+ и Python. Приложения, написани на GTK+ може да живее не само под Linux, ако инсталирате необходимите библиотеки, тогава можете да стартирате приложения под MacOS и Windows, едно от предимствата на библиотеката е междуплатформената.

Като пример, нека напишем приложение за каталогизиране на филми за любител на филм. Всички елементи на интерфейса ще бъдат включени GTK+, филмите ще се съхраняват в SQLite, ORM ще се използва за комуникация с базата данни - SQLAlchemy.

Накратко за GTK+

PyGTK е обвивка над GUI библиотека GTK+ и предоставя възможност за създаване на GUI приложения в Python. PyGTK Състои се от няколко компонента:

  • GObject - базов клас, предоставящ общи свойства и методи за PyGTK класове;
  • Глиб предоставя основната обектна система, използвана от GNOME, изпълнение на основен цикъл и обширен набор от помощни функции за низове и общи структури от данни. източник
  • GDK (GIMP комплект за рисуване) - обвивка над библиотеки за рисуване и прозорци на ниско ниво. Намира се между GTK+ и X сървър.
  • Панго - отговаря за локализацията и работата с шрифтове;
  • АТК - набор от инструменти за внедряване на интерфейс за хора с увреждания;
  • Кайро - библиотека за създаване на 2D графика;

Ако имате работен плот на GNOME, системата вече е инсталирана PyGTK, в противен случай отидете на страницата за изтегляне и изтеглете версията за вашата платформа.

Проверете инсталираните версии GTK+ и PyGTK

Всички приложения включени PyGTK се състоят от визуални компоненти - джаджи. Които могат да бъдат или видими (бутони, комбинирани полета и т.н.) или невидими (например оформления). Повечето приспособления могат да отговорят на определени събития, генерирани от X сървъра. Когато потребителят щракне върху бутона, той се генерира сигнал, което повдига събитието - щракна, програмистът трябва само да напише манипулатор за събитието. Всички събития в приложението се контролират от главния цикъл на събития, който се изпълнява по време на инициализацията на приложението.

За да изградите интерфейс на приложение, можете да използвате два подхода: ръчно да опишете всички джаджи и реда на тяхното разполагане във формуляра, или да използвате Glade - така нареченият RAD (бърза разработка на приложения), GUI инструмент за дизайн на визуален интерфейс. Процесът се свежда до хвърляне на приспособления върху формуляра (като в Delphi или QT Designer) и именуване на обработчиците на събития. След това целият резултат се записва в XML файл, който се анализира с помощта на libglade в конструктора на основния прозорец на приложението. В резултат на това получаваме готов интерфейс. Добра длъжностна характеристика с Поляна е тук.

Използвах първия подход - ръчно описах и поставих приспособления във формуляра, по този начин разбирането за вътрешната кухня се формира по-добре и едва тогава можете да продължите към Поляна за да се сведе до минимум времето за дизайн на интерфейса.

  • HBox - джаджите са разположени хоризонтално, една след друга;
  • VBox - джаджите се поставят вертикално, една след друга;
  • Фиксирано - приспособленията се поставят на дадените координати x и y
  • Таблица - приспособленията се поставят в невидима таблица
  • Подравняване - позволява ви да регулирате позицията и размера на вложените приспособления спрямо приспособлението майка

Накратко SQLAlchemy

SQLA Алхимия Е софтуер с отворен код за работа с бази данни, използващи езика SQL. Той прилага технологията за програмиране Object-Relational Mapping (ORM), която свързва базите данни с концепциите на обектно-ориентираните програмни езици. SQLAlchemy ви позволява да опишете структурите на базата данни и как да взаимодействате с тях директно в Python. източник

Проверете резултата от инсталацията

За да създадем ORM със съществуваща база данни, ще използваме декларативен подход, който свежда до минимум процеса на установяване на връзка. Нека разгледаме пример за работа SQLAlchecmy и SQLite по примера на модел на бъдещо приложение.

Внасяме използваните методи и типове полета:

Създаваме обект, отговорен за работата с базата данни и посочваме да извежда всички SQL заявки към конзолата - удобно за отстраняване на грешки.

Създайте обект, отговорен за изпълнение на транзакции и изпълнение на заявки

Нека създадем основен клас, от който по-късно ще наследим модела „Филми“

Самият модел в атрибута име на таблица указва името на таблицата, в която ще се съхранява списъкът с филми. Останалите атрибути представляват характеристиките на модела и също ще бъдат колоните на таблицата:

Нека създадем файл с база данни и необходимите таблици

Нека се опитаме да създадем публикация за нов филм

Сега нека изберете всички филми от базата данни:

sqlalchemy

В началото небрежно се докоснах до подреждането на джаджи на формуляра, използвайки оформления, сега ще опиша малко по-подробно един от тях - VBox, върху него всички джаджи са подредени вертикално, една след друга.

Това оформление е създадено по следния начин:

Първият параметър на конструктора, хомогенен, който в случая е False, означава, че всяка джаджа, разположена в това оформление, може да заема различна вертикална височина, ако е зададена на True, тогава за всички джаджи ще бъде зададена същата височина (общата височина зависи от родителя). Вторият параметър задава допълването в пиксели между вложените блокове.

Джаджи могат да се добавят към оформлението от двете страни, в случай на VBox отгоре (метод pack_start) и отдолу (метод pack_end).

подпис на метода pack_start:

  • първият параметър (дете) е добавената джаджа;
  • вторият (разширяване) е булев параметър, който е отговорен за размера на поставената джаджа и показва дали (ако е вярно) приспособлението ще заема цялото налично пространство или избраният блок ще бъде компресиран до размера на приспособлението (невярно);
  • третият параметър (запълване) е валиден, ако разгънете = Вярно, ако запълнете = Вярно, тогава джаджата ще се простира до размера на избрания блок, в противен случай ще има празно място около джаджата;
  • последният параметър (подложка) - подложка, в пиксели;

Приспособлението gtk.TreeView със съхранение на данни (gtk.ListStore) се използва за съхраняване на таблични данни. По-долу ще създадем екземпляр на приспособлението и ще му предадем вече попълненото хранилище за данни. Хранилището се запълва чрез банална итерация за всички записи в базата данни и добавяне към хранилището чрез метода на добавяне, който се предава списък със стойности (вижте източниците в прикачения файл по-долу).

Следващата стъпка е да създадете колони за приспособлението TreeView, методът create_columns е отговорен за това.

Има два манипулатора на събития, присвоени на приспособлението TreeView:

  • събитие ред-активиран - щракнете двукратно върху ред от филми, извиква се диалогов прозорец за редактиране на избрания филм;
  • събитие курсор-променен - едно щракване върху ред от филми или придвижване през списъка с помощта на курсори - състоянието в лентата на състоянието се актуализира;