2

シリアルを使用してモーターを制御するアプリを Python で作成しようとしています。これはすべて、CLI の状況で正常に機能し、一般的に安定しています。しかし、このコード ベースに GUI を追加するのはどれほど簡単なのだろうと思っていました。

もっと多くのコードがあると思いますが、GTK のようなものを検出する簡単な方法があるので、GTK が存在する場合にのみコードを適用しますか?

また、一般的に Python での GUI の作成: GUI の詳細をコードから除外し、GTK の XML ベースのアプローチ (gtk.glade.XML() 関数を使用) のようなものを使用するのが最善ですか? Glade / XML / "Explode in Code" アプローチと同様のアプローチを持つ他の GUI ツールキットはありますか?

アドバイスをありがとう。

アンディ

4

4 に答える 4

12

GTK のようなものを検出する簡単な方法があるので、GTK が存在する場合にのみコードを適用しますか?

まず、アプリを 3 つの個別のモジュールに分割します。

  1. 実際の作業: foo_core.py.

  2. をインポートする CLI モジュールfoo_core。それを呼び出しますfoo_cli.py

  3. をインポートする GUI モジュールfoo_core。それを呼び出しますfoo_gui.pyw

モジュールはfoo_cliこんな感じ。

import foo_core
import optparse

def main():
    # parse the command-line options
    # the real work is done by foo_core

if __name__ == "__main__":
   main()

モジュールは次のfoo_guiようになります。

 import foo_core
 import gtk # or whatever

 def main()
     # build the GUI
     # real work is done by foo_core under control of the GUI

 if __name__ == "__main__":
     main()

それは一般的に十分です。CLI と GUI のどちらが必要かは、ユーザーが自分で判断できると信頼できます。

人々を混乱させたい場合はfoo.py、次のようなスクリプトを作成できます。

try:
    import foo_gui
    foo_gui.main()
except ImportError:
    import foo_cli
    foo_cli.main()
于 2010-05-18T13:33:54.510 に答える
1

それは、あなたが望む相互作用の種類によって異なります。

実際の G​​UI が必要な場合は、謙虚なダイアログパターンを使用して GUI をプログラム ロジックから分離し、テキスト "GUI" を使用して CLI を処理できます。これには、GUI の大部分がプログラム可能なテスト可能になるという素晴らしい副作用もあります。

もう 1 つの方法は、sys.stdin と sys.stout を独自のオブジェクトに割り当てることです。これにより、プログラムの IO が GUI にリダイレクトされます (これは、Python 以外のライブラリでは機能しません)。つまり、GUI での対話の可能性は少なくなりますが、プログラミングの手間は大幅に軽減されます。

于 2010-05-18T13:37:41.680 に答える
0

さて、私がしていることは、次のような唯一のbashスクリプトを持っているということです。

if [ "${0}" == "mcm" ]; then
    /usr/bin/python ${inst_dir}/terminal/mcm-terminal.py ${@}
else
    /usr/bin/python ${inst_dir}/gtk/mcm-gtk.py &
fi

次に、2つのシンボリックリンクを作成します:/ usr / sbin/mcmと/usr/ bin / mcm-gtk

とてもうまくいきます。

于 2010-05-20T16:43:02.037 に答える
0

XML で GUI を作成することはお勧めしません。XML が行うことは、レイアウトを記述するためのミニ言語を提供することだけです。Python のすべての機能を利用できるのに、なぜミニ言語を使用するのでしょうか。

GTK の検出に関しては、私はお勧めしません。代わりに、コマンド ライン引数を追加して、GUI を作成するかどうかを決定します (例: myprogram -g)。これにより、デスクトップ ショートカットまたはコマンド ライン エイリアスを簡単に作成して GUI モードで起動できるようになり、任意のターミナルからコマンド ライン ツールを使用できるようになります。

ただし、GUI コードを実際の作業を行うビットから分離しておく必要があります。すべてのビジネス ロジックを含むクラスを用意し、GUI と CLI の両方でこのオブジェクトにアクセスして作業を行います。

于 2010-05-18T13:34:59.313 に答える