e-Linux.pl

|
|
QFaktury GPL : QFaktury dodatki/wtyczki
Napisał moux dnia 17/4/2009 13:50:00 (4497 odsłon)

W QFakturach od wersji 0.6.2 dodano obsługę skryptów pythona. Podstawową zaletą pythona jest możliwość współpracy z Qt a co za tym idzie łatwość tworzenia interfejsu. Dlatego też skrypty mogą nie tylko wykonywać zdefiniowane w nich funkcje ale także mogą komunikować się z użytkownikiem. Ten artykuł opisuje jak stworzyć skrypt PyQt4, który zarchiwizuje dane programu QFaktury w podanym przez użytkownika folderze.

QFaktury + python
Program QFaktury podczas ładowania przeszukuje folder ~/elinux/plugins w poszukiwaniu plików *.py. Jeśli takowe znajdzie czyta dwie pierwsze linie z takiego pliku. Pierwsza ignoruje gdyż powinno tu być: #!/usr/bin/python. Drugą natomiast dodaje do menu Dodatki w programie QFaktury. Tak więc program QFaktury ma możliwość wykonania dowolnego skryptu *.py z katalogu ~/elinux/plugins

PyQt4
Aby można było używać skryptów pythona należy oczywiście mieć pythona zainstalowanego. Nie spotkałem jeszcze dystrybucji Linuksa wydanej po 2005, w której pythona by nie było. Tak więc najprawdopodobniej wszystko jest na miejscu.
Aby móc wykonać skrypty PyQt4 (skupimy się na Qt4 gdyż Qt3 nie jest już rozwijane) musimy mieć zainstalowany binding PyQt4. Aby to zainstalować wystarczy na fedorze:

yum install PyQt4

a na debianie:
apt-get install python-qt4 python-qt4-common

W innych dystrybucjach też z pewnością są paczki do PyQt4.

Python archiwizacja danych
Na początku tworzenia skryptu damy mu możliwość podłączenia do QFaktur poprzez nagłówek:
#!/usr/bin/python
# Archiwizacja danych

W tym przypadku „Archiwizacja danych” pojawi się w menu dodatki.

Python moduly
Do wykonania skutecznej archiwizacji będziemy potrzebować poniższych modułow:
import os
import tarfile
import time

os – da nam możliwość do poruszania się po systemie plików
tarfile – stworzy archiwum
time – zostanie użyty przy tworzeniu nazwy pliku archiwum

Archiwizacja
Cala archiwizacja będzie polegała na pobraniu katalogu domowego, utworzeniu timestamp czyli daty z dokładnością co do sekundy, która zostanie użyta jako nazwa pliku archiwum oraz stworzeniu pliku tar ze zarchiwizowanymi danymi.

# Katalog na archiwum
directory = "/home/moux”

# Pobierz katalog domowy
homedir = os.path.expanduser('~')
os.chdir(homedir)

# Stworz timestamp 
ltime = time.localtime()
timestamp = str(ltime.tm_year) + str(ltime.tm_mon) + str(ltime.tm_mday) + str(ltime.tm_hour) + str(ltime.tm_min) + str(ltime.tm_sec)

archname = directory + "archive_" + timestamp + ".tar.gz"

# Stworz archiwum tar
tar = tarfile.open(archname, "w:gz")
tar.add("elinux/")
tar.close


PyQt4
W powyższym skrypcie brakuje dwóch podstawowych rzeczy. Po pierwsze użytkownik nie ma możliwości wybrania katalogu na archiwum. Po drugie nie wiadomo czy uruchomienie skryptu zakończyło się sukcesem czy porażka. Taką funkcjonalność dodamy przy użyciu PyQt4.

Na początku musimy zaimportować odpowiednie moduły:
import sys
from PyQt4 import QtGui


Następnie użyjemy QFileDialog żeby pobrać nazwę katalogu:

# Pobierz nazwe katalog, w ktorym beda zapisane dane
app = QtGui.QApplication(sys.argv)
fd = QtGui.QFileDialog()
directory = str(fd.getExistingDirectory(None, "Wskaz katalog na archiwum", "/home"))


Wyświetlanie wiadomości o sukcesie QMessageBox

# Wyswietl informacje o sukcesie
QtGui.QMessageBox.information(None, "QFaktury", "Utworzono archiwum: " + archname )


Całość skryptu:

#!/usr/bin/python
# Archiwizacja danych

import os
import tarfile
import time
import sys
from PyQt4 import QtGui

# Pobierz nazwe katalog, w ktorym beda zapisane dane
app = QtGui.QApplication(sys.argv)
fd = QtGui.QFileDialog()

directory = str(fd.getExistingDirectory(None, "Wskaz katalog na archiwum", "/home"))

# Pobierz katalog domowy
homedir = os.path.expanduser('~')
os.chdir(homedir)

# Stworz timestamp 
ltime = time.localtime()
timestamp = str(ltime.tm_year) + str(ltime.tm_mon) + str(ltime.tm_mday) + str(ltime.tm_hour) + str(ltime.tm_min) + str(ltime.tm_sec)

archname = directory + "archive_" + timestamp + ".tar.gz"

# Stworz archiwum tar
tar = tarfile.open(archname, "w:gz")
tar.add("elinux/")
tar.close

# Wyswietl informacje o sukcesie
QtGui.QMessageBox.information(None, "QFaktury", "Utworzono archiwum: " + archname )


Ten jak i wszystkie inne skrypty dostępne są tutaj, mozżna je też przeglądać przez svn