前提・実現したいこと
Visual Studio 2017のWFPでGUIを作っています。その際にbuttonからpythonの外部ライブラリ(numpyやmatplotlibなど)を含む.pyファイルを実行したいです。
現状としてはデバッグするとButtonが表示されたGUIは適切に立ち上がり、C#で書いたShow()関数では文字を表示できました。
しかしpythonファイルを実行しようとすると表示されたButtonをクリックしてもpythonファイルが実行されていません。どなたか解決策に関する知見をお持ちではございませんでしょうか?
私の開発環境は以下の通りです。
・Visual Studio2017,
・C#,
・python3.6.8
※参考にしているサイトは以下の通りです。
・Windows GUIプログラミング入門1 メッセージボックス表示
・第7回 Windowsフォームアプリケーションからパペロを制御してみた
該当のソースコード
メインとなるC#のファイルMainWindow.xaml.csがこちら
C#
1using System; 2using System.Collections.Generic; 3using System.Diagnostics; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.Windows; 8using System.Windows.Controls; 9using System.Windows.Data; 10using System.Windows.Documents; 11using System.Windows.Input; 12using System.Windows.Media; 13using System.Windows.Media.Imaging; 14using System.Windows.Navigation; 15using System.Windows.Shapes; 16 17namespace python_in_cc 18{ 19 /// <summary> 20 /// MainWindow.xaml の相互作用ロジック 21 /// </summary> 22 public partial class MainWindow : Window 23 { 24 public MainWindow() 25 { 26 InitializeComponent(); 27 } 28 29 private void Button_Click(object sender, RoutedEventArgs e) 30 { 31 var p = new Process(); //プロセスクラスのインスタンスを生成 32 33 p.StartInfo.FileName = @"C:\(ファイルのディレクトリ)\python.exe"; //python.exeの場所を指定 34 p.StartInfo.UseShellExecute = false; //シェルで実行を無効 35 p.StartInfo.CreateNoWindow = true; //Windowを開かないように設定 36 37 //引数にPythonスクリプトを指定 38 p.StartInfo.Arguments = @"C:\(ファイルのディレクトリ)\calc.py"; 39 40 p.Start(); //プロセスの実行 41 42 p.WaitForExit(); //プロセスの終了まで待機 43 p.Close(); //プロセスを終了 44 } 45 } 46 47}
そして、外部ライブラリを含むpythonファイルcalc.pyがこちら
py
1#!/usr/bin/env python 2# coding: utf-8 3 4import matplotlib.pylab as p 5from mpl_toolkits.mplot3d import Axes3D 6from numpy import* 7 8print("Initialinzation") 9Nmax=100;Niter=50;V=zeros((Nmax,Nmax),float);d=10;a=45;xedge=10;t=10;r=pi 10 11print("Working hard,wait for the figure while I count to 60") 12for k in range(xedge,Nmax-xedge): 13 for l in range(a,a+t): 14 V[k,l]=-100 15 for l in range(a+d,a+d+t): 16 V[k,l]=100 17 18for iter in range(Niter): 19 if iter%10 == 0:print(iter) 20 for i in range(1,Nmax-2): 21 for j in range(1,a-1): 22 V[i,j]=0.25*(V[i+1,j]+V[i-1,j]+V[i,j+1]+V[i,j-1]) 23 for j in range(a+t+1,a+d-1): 24 V[i,j]=0.25*(V[i+1,j]+V[i-1,j]+V[i,j+1]+V[i,j-1]) 25 for j in range(a+d+t+1,Nmax-2): 26 V[i,j]=0.25*(V[i+1,j]+V[i-1,j]+V[i,j+1]+V[i,j-1]) 27x=range(0,Nmax,2);y=range(0,Nmax,2) 28X,Y=p.meshgrid(x,y) 29 30def functz(V): 31 z=V[X,Y] 32 return z 33 34Z=functz(V) 35fig=p.figure() 36ax=Axes3D(fig) 37ax.plot_wireframe(X,Y,Z,color="b") 38ax.set_xlabel("X") 39ax.set_ylabel("Y") 40ax.set_zlabel("Potential") 41ax.set_title('Potential of capacita') 42p.show() 43 44print(V[50,a]) 45print(V[50,a+5]) 46print(V[50,a+t]) 47print(V[50,a+d]) 48print(V[50,a+d+5]) 49print(V[50,a+d+t])
試したこと
どなたかお力添えのほう宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー