2017-05-12 10 views
1

にGUIから値を渡すと、私はPythonスクリプトを持っている(私たちは「script.py」と言うでしょう)私は別のGUIのPythonスクリプト(「GUI.py」)を使用してから値を取得したいです。 GUI.pyスクリプトを実行するとき、GUIのボタンをクリックした後に、GUIのこれらのテキストフィールドをscript.pyに送る必要があります。私の最善の解決策は、GUI.pyにこれらの値をすべて保持する別のスクリプト( "lib.py")を作成させ、単にそれに書き込むことだと考えています。次に、 "script.py"スクリプトを実行します。したがって、すべてのすべてでGUI.pyは次のようなものになりますと呼ばれることの機能があります:私はこれが動作すると思いますPythonの:他のPythonスクリプト

def on_button(self): 
    username = self.usernameInput.get() 
    file = open(“lib.py”,”w”) 
    file.write(“username = ” + username) 
    os.system("script.py") 

を、私はちょうど疑問に思って、これは現実的な解決策のように見えるのでしょうか?皆さんの考えを教えてください。

+0

'file.write(" username = "+ username")はPythonスクリプトに入力する正しい方法ではなく、代わりにこれらの内容を '.py'ファイルに直接書き込むことができます。 'bizzare' username'を入力すると '.py'ファイルが壊れてしまいます。 – ZdaR

+0

もう一つのオプションは 'sys.argv'から読み込み、引数を' subprocess.call'で渡すようにスクリプトを設定することです。 –

答えて

2

、私は、これは現実的な解決策ではないと思います。

実行するPythonスクリプトをモジュールにするか、GUIで直接呼び出すことができるパッケージを作成することを検討しますか?私はそれが最もクリーンなアプローチだと思います。スクリプトをモジュールとして使用する場合は、docsまたは2.7をご覧ください。

基本的にモジュールはPythonのファイル、script.pyで、限り、それはPythonパス(たとえば、現在のディレクトリ)にあるように、あなたはそれをimportことができます。

from script import action 

だから、あなたは試みることができる:

を問題のスクリプトが if __name__ == "__main__":ステートメントを使用しています(または、コマンドラインから実行することができる)場合、ある
def on_button(self): 
    username = self.usernameInput.get() 
    result = action(username) # and any other args you want to pass 
    print(result) 

、いくつかのdef action(args):機能で操作を入れて、あなたのGUIにインポートしてみてください。

+0

これは "if __name__ ==" __main__ ":"ステートメントを使用します。しかし、私は渡したいユーザー名だけではありません。いくつかの値があります。これらの値をすべてscript.pyに渡してから、script.pyを実行します。だから、私は値を渡すことができるメソッドをscript.pyに追加するべきでしょうか? "def getUsername(username):"のように?または、GUIからmain関数を実行する方法はありますか? – BUInvent

+0

絶対に!インポートし、**必要なパラメータを渡すならば、GUI内の任意の機能を実行することができます:)。だから、あなただけのユーザ名以上のものを渡すこともできますし、必要に応じて設定ファイルを含めることもできます。 。「もし__name__ == 『__main__がある場合にはポイントはGUI内のモジュールとしてスクリプトを呼び出すことです(あなたが__main__機能 – Nevermore

+0

OKに渡すどのように多くの事柄に関係なく、私は私はあなたが言っているものを見ると思います』:」 script.py内の関数は、その後、私はいくつかの並べ替え「デフアクション(引数):」に変更してみてください、私はすべての値を渡すことができるように機能正しいか間違っを – BUInvent