2012-03-29 4 views
3

私はコマンドラインのPythonスクリプトを使用して、ある種類のファイルを別の種類のファイルに変換するのにうまく機能し、これをいくつかのパラメータを与えられた同僚に展開したいコマンドラインが何であるかを知る。コマンドラインスクリプトのクックブックGUIインターフェイス

どのPython GUIツールキットが「ベスト」であるかを判断してから、何が必要なのかを学ぶことができましたが、これは以前と同じように思えます。

私のプログラムをGUI化するための比較的調理法の方法はありますか?レッスン/チュートリアルや既存の文書化された簡潔なプログラムのいずれかの方向性は優れています。

+0

wxPythonには、http://www.wxpython.org/download.php#stableのサンプルを含む素晴らしいデモスイートがあります。 wxPythonとpyQtのいずれかが目的に適しているはずです。 – Fenikso

答えて

0

基本的には、最も優れたデータを保持するウィジェットを把握するだけで済みます。私はあなたがいくつかのコンボボックスを使用して、さまざまな拡張子を持つことができると考えています。あるいは、パス名の文字列を使ってそれを理解することもできます。おそらく別のスレッドでボタンを押して変換プロセスを実行すると、GUIは応答したままです。

私はwxPythonに偏っています。しかし、デモやドキュメントを見て、どのGUIツールキットがあなたの脳に最も適しているかを見ている方が良いでしょう。

0

これは、ほとんどの場合、必要に応じて異なります。あなたの必要が単純ならば、Python自体にバンドルされているtkinterを使うだけでいいです。これを使用すると、サードパーティ製のライブラリを使用してGUIを実装する必要はありません。あなたの同僚のためにこれを利用できるようにしたいので、py2exeや他の同様のものをexeにコンパイルするほうが簡単かもしれません。これはGUI用のサードパーティライブラリを使用すると難しいかもしれません。しかし、GUIにさらに機能を追加したい場合は、wxpython/pyqt/pyGTKがGUIツールキットです。個人的には、wxpythonはクロスプラットフォームの性質のために好きですが、pyqtとpyGTKも私が聞いた限り同じように優れています。あなたに十分なwxPythonのを教えること

4

だけ迅速かつ簡単な例が軌道に乗るために:

import wx 
from subprocess import Popen, PIPE 

class MainWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 

     self.panel = wx.Panel(self) 
     self.button = wx.Button(self.panel, label="Run!") 
     self.command = wx.TextCtrl(self.panel) 
     self.result = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE) 

     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.command, 0, wx.EXPAND) 
     self.sizer.Add(self.button, 0, wx.EXPAND) 
     self.sizer.Add(self.result, 1, wx.EXPAND) 

     self.command.SetValue("dir") 
     self.button.Bind(wx.EVT_BUTTON, self.CallCommand) 

     self.panel.SetSizerAndFit(self.sizer) 
     self.Show() 

    def CallCommand(self, e): 
     p = Popen(self.command.GetValue(), shell=True, 
        stdin=PIPE, stdout=PIPE, stderr=PIPE) 
     r = p.communicate() 
     self.result.SetValue(r[0]) 

app = wx.App(False) 
win = MainWindow(None) 
app.MainLoop() 

例を完了するために、次のコードでは、別のスレッドでコマンドラインを実行し、ラインによって、結果行を示しています

import wx 
from wx.lib.delayedresult import startWorker 
from subprocess import Popen, PIPE 

class MainWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 

     self.panel = wx.Panel(self) 
     self.button = wx.Button(self.panel, label="Run!") 
     self.command = wx.TextCtrl(self.panel) 
     self.result = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE) 

     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.command, 0, wx.EXPAND) 
     self.sizer.Add(self.button, 0, wx.EXPAND) 
     self.sizer.Add(self.result, 1, wx.EXPAND) 

     self.command.SetValue("dir") 
     self.button.Bind(wx.EVT_BUTTON, self.CallCommand) 

     self.panel.SetSizerAndFit(self.sizer) 
     self.Show() 

    def CallCommand(self, e): 
     startWorker(self.WorkCommandDone, self.WorkCommand) 

    def WorkCommand(self): 
     self.button.Disable() 
     p = Popen(self.command.GetValue(), shell=True, 
        stdin=PIPE, stdout=PIPE, stderr=PIPE) 
     while True: 
      line = p.stdout.readline() 
      if line != '': 
       wx.CallAfter(self.result.AppendText, line) 
      else: 
       break 

    def WorkCommandDone(self, result): 
     self.button.Enable() 

app = wx.App(False) 
win = MainWindow(None) 
app.MainLoop() 
+0

「すばやく簡単な例」の略語です。これを修正するために 'wx.lib.delayedresult'で簡単に拡張することができます。 – Fenikso

1

wxpythonを提唱する回答がいくつかあります。ただし、ツールキットがこのプロジェクトで動作します。 Tkinterには、あなたとあなたの同僚がすでにインストールしているという追加の利点があります。使い方はとても簡単です。

言われているように、他のツールキットは多かれ少なかれ使い勝手が良いですが、インストールするにはフープまたは2つを飛ばしなければならないかもしれません。インストールが問題でない場合は、どちらを選択するかは関係ありません。

あなたのアプリについては何も知らないので、あなたのプログラムを「GUIfy」する方法を伝えるのは難しいです。おそらく、いくつかのラベルと入力ウィジェットを入れ、すべてのデータを収集してサブプロセスモジュールでプログラムを実行するボタンを作成するだけです。

関連する問題