Python、Qt、および少しのクロスプラットフォーム

画像

私の学期論文からの小さな抜粋をご紹介します(より正確には、これは教育的習熟の実践です)。

Habréでは不要な多くの理論上の水を省略し、小さなプログラムをLinuxからWindowsに転送する方法をかなり合成的な例で示します。

これは指示ではなく、決してそれを主張するものではないことに注意してください。 これは、物事がどのようになっているかを示すプロセスの短い概要です。



Python、Qt、およびPyQtは、ほぼすべてのディストリビューションで使用でき、その場合、迅速かつ簡単に配信できます(パッケージの正確なサイズはわかりませんが、主観的には小さいです)。

このアプリケーションは、名前付きの色のリストと、カスタマイズ可能な背景色とフォント色のテキストボックスです。 そのコードは以下のリンクで見つけることができます。

結果は、 サイズが6.31 KB(6,468バイト)のcol.pyファイルと、6.56 KB(6,724バイト)のcui.pyインターフェースファイルでした。 col.txtファイルには色のリストが含まれています。

インターフェイスは、ビジュアルエディター-QtDesignerを使用して作成されます。 プログラムは、インターフェース構造がXML形式で記述されている、拡張子がuiのファイルを作成します。 次に、pyuicユーティリティを使用して、このファイルからPython言語クラスが形成され、次のコードを使用してメインファイルに接続されます。

曲がったインターフェイスについては事前に謝罪します-やり直す方法はまだありません。

実際、ファイルに実行の許可を与えるのは私たちの仕事であり、実行することができます。



Windowsはまったく異なります。 このファイルを実行するには:

Pythonインタープリターのインストール(14 mb)

Qtライブラリ(200〜280 mb)をインストールする

PyQtバインディングの設定(17mb)

ディストリビューションをダウンロードして手動でインストールする場所を探す必要があるため、12kbのプログラムには多すぎます。 ユーザーに300メガバイト以上を強制的に送り出さないように、実行可能exeファイルをコンパイルします。これには、ライブラリファイル(約20 mb)のみが必要です。 もちろん、これも理想とはほど遠いですが、状況を明確に示しています。

上記に加えて、実行可能ファイルをコンパイルするには、 py2exeプログラム(200kb)が必要です。 指示に従って、必要な引数をユーティリティに渡すsetup.pyファイルを生成します。 ちなみに、PyQt4で作業するには、コンパイラファイルで少し魔法をかける必要があります。 コンパイルプロセス(「--include sip」などのパラメーターを忘れないでください)および出力には、実行可能ファイルとライブラリを含むフォルダーがあります。 19 MBの合計サイズ。 exeファイル自体の重さはわずか20 kbですが、動作するには多くのファイルが必要です。



それでは、どれだけうまく機能するかについて話しましょう。

たとえば、クリップボードに色をコピーする機能を使用します。 すぐに、Linuxには単一のバッファーがなく、Xサーバー、Qt、またはGtkバッファーが使用されることがわかりました。 また、PyQt for Windowsはクリップボード機能をサポートしていません。 つまり、機能が正常に機能するためには、最初からプログラムが実行されているプラ​​ットフォームを判別し、対応する機能を接続する必要があります。

または別の例-アプリケーションを終了する信号を生成するメニュー項目。 Windowsでプログラムが応答しなかった理由はまだわかりません。



残念ながら、プログラムがさまざまなOSで完全に動作するには、異なるバージョンのソースコードを記述する必要があります。インタープリタ言語とその移植性で知られるライブラリのクロスプラットフォーム機能を使用しても正しく動作しないことがすでにわかっているためです。 また、同じコードを異なるプラットフォームで動作させるには、修正、テスト、移植、テスト、コンパイル、テストといった開発サイクルを大幅に複雑にする必要があります。

私たちがコンパイルし、LinuxでWineプログラムを使用して起動した実行可能ファイルは、テキストの表示を完全に拒否したことを除いて、実際のWindowsとまったく同じように動作しました。 すべてのフォントがインストールおよび構成されていますが。



PS私の最初のトピック-私は批判を待っています。 これは、学部の2〜2.5人の教師だけが少なくとも何かについて知っているトピックに関する作業であるため、完全に技術的な詳細であることに注意してください。しかし、コメントや提案があれば歓迎します。



All Articles