会計システム用の小さなpython + PyQt4アプリケーションの開発例

多くの場合、昨日機能するはずの企業システム用のアプリケーションを開発する必要があり、企業標準への厳密な準拠は必要ありません。 そのようなアプリケーションは、サイトに対するcmsを表すことができます。* nixシステム下のサービスのguiは、会計システムの単なるアプリケーションです。 スクリプト言語でこの種のアプリケーションを開発することはトピックです! 通常、実行速度の点で最適です。 猫の下で、Python + PyQt4でアプリケーションを実装する例、アプリケーション関数はxlsファイルからデータを解析およびロードします...

スクランブルエッグ調理するために私は使用しました:

  1. Python2.5
  2. PyQt-4.4.3
  3. kinterbasdb3(KISデータベース-Firebird)
  4. xlrd-0.6
emacs python-modeをエディターとして全員にお勧めします(これは

Windowsユーザー):



emsc python-mode



1.キャビネットから食器を取り出します(保管設定)



一般に、スクリプト言語の場合、この質問は価値がありません。タイプsettings.pyの設定ファイルを作成し、コードレベルで安全に実行できるからです。

# -*- coding: cp1251 -*-

host='localhost/3051:intur'

user='SYSDBA'

path='d:\\dlogs\\scanner\\xls'



oprts = (

u'',

u'',

u'',

u'',

u'',

)






プログラムで変数を取得する方法は次のとおりです。

mod = __import__(modName)

host = getattr(mod, 'host', 'horn:intur')

user = getattr(mod, 'user', 'SYSDBA')







2.フォームの説明



Qt Softwareは、ドキュメントの点で一般的にハンサムです。または、GUIを描画するためのツールを比較する場合、ここでも優れています。 QtDesigner +でペイントしたプログラムのメインウィンドウは、処理が必要なウィジェットからの信号をマークしました。

emsc python-mode

もちろん、デザイナーでフォームをすばやく組み立てるには、レイアウトとスペーサーの形成メカニズムについてもう少し理解する必要があります。 アプリケーションにウィンドウを上げるための2つのオプションがあります。必要なプログラミング言語でファイルを生成するか、Qt特殊モジュールを使用してxml記述ファイルからクラスを構築します。 私は通常ファイルを生成しますが、これはより良いものとは言えませんが、より便利なようです。 Pythonの場合、PyQtが提供するpyuic.batをプロジェクトディレクトリにコピーし、デザイナーで作業しながらウィンドウハンドラクラスを生成するだけです。

私にとっては、メインウィンドウでは次のようになります。



  pyuic.bat -o mwnd.py mwnd.ui
      
      





wx Qtとは異なり、それを生成するのはメインウィンドウクラスの相続人ではなく、ウィンドウの基本クラスを引数として受け取り、コントロールを「ハング」させる修飾子クラスです。 C ++で生成する場合、Qtは多重継承を使用し、アプリケーションのクラスはベースウィンドウクラスと修飾子クラスの継承者になります。 ファイルを生成するときに、pyuicスロットが基本クラスにハングアップするため、矛盾が発生します。シグナルハンドラーは、ウィンドウの基本クラスの継承者であり、生成されたピュイックリンクの修飾子クラスは、同じウィンドウのコントロールにあります。



 def _initApp(self): self.mwnd, self.mwnd.ui = MainWnd(), Uwnd() self.mwnd.ui.setupUi(self.mwnd)
      
      





モディファイヤクラスをウィンドウベースクラスの継承者に接続しましたが、コントロールにアクセスする必要があるときに判明し、self.ui。 "name"として通信しました。 当たり前のことのように思えますが、それが初めてではなく、どのくらいの頻度で思い浮かびましたか。



また、Pythonが属性およびクラスメソッドの名前のキーワードをダイジェストしないため、変数self.passまたはself.exec()を設定することはできません。 したがって、各PyQtアプリケーションsys.exit(app.exec_())の面白い碑文



3.パンをストーブに置くか、アプリケーションを起動します



main.pyのコードは次のとおりです。そのタスクは、開始、設定ファイルのロード、パスワードの要求、成功した場合はメインアプリケーションウィンドウの起動です。



main.py



4.目玉焼きに卵を入れることを忘れないでください。



メインアプリケーションウィンドウの継承者(MainWnd)は、ユーザーの行動を追跡する機能を実行します。ここで、デザイナーで生成したスロットが表示されます。ここで、コードのメインタスクは、データベースにファイルをロードするアプリケーションのメインクラスの最も透明でシンプルなウィンドウ管理機能です。

アプリケーションのメイン機能を実行するクラス-データの解析とロード(MainModel)はメインウィンドウがないと意味がないため、ウィンドウの属性にします。 Pythonでxlsファイルを解析するのはささいな使い方であり、すばらしいxlrdライブラリは、かさばるOLEマシンを上げることなくファイルを直接処理するため、さらに高速です。 アプリケーションでは、変更されたファイルのみをモードでダウンロードできるため、データベースに保存されている変更日付と最後のロードを比較するためにMainModelがなくなった部分です。 そのため、アプリケーションのメイン作業クラス以外に、データベースと通信する人はいません。これに、sql "terms"にMainModel命令を格納する小さなクラス(dbConn)を与えます。



Wndmodel.py



一般に、科学では、変数(たとえば、app)をContainerクラスから階層レベル2クラスにプルするため、プログラムの特定の厄介さがあります。 大規模なプログラムでは、このような変数は9000を少し上回り、この問題はシングルトンの助けを借りて解決されます(次回はこれを考慮します)。



その結果、目的に使用できるアプリケーションテンプレートを取得し、WndModel.pyを破棄し、ベースウィンドウの子孫を記述し、タスクを実装するクラスを作成しました。そして今でもすべてが動作しているようです。



PS完全なソースコードはこちら



UPD。 外部のコードガードにコードを持ち出しました。Habrでpythonコードを正しく強調表示する方法を誰かが教えてくれたら、ありがたいです。



All Articles