ここでは、C#のGUIのフレームワークであるWPFのサンプルプログラムを、ChatGPTの力を借りながら、作ったサンプルコードをまとめています。実行可能であることは確認していますが、WPF初学者の私がChatGPTと作っているので、ベストな方法ではないかもしれませんので、ご了承ください。
はじめに
機械学習系のプログラムはやっぱりPythonが便利ですが、GUIが備わったアプリを作ろうと思うと、Python標準のGUIライブラリ、tkinter のルックスが今一つだったりします。
そこで、メインの計算はPythonでやらせて、GUIはC#のWPFで作るということができると、ちょっといいかなと思ったりします。
そこで、ChatGPTと相談しながら、サンプルプログラムを作りました。
構成は?
まず、どういうフレームワークで作ればよいか聞いてみました。
バックエンドをpythonでつくり、GUIをWPFで作るという方法を考えます。初学者にとって一番わかりやすい構成を考えてください。
すると、バックエンドにはFlaskを使うといいよと教えてくれました。
初学者にとってわかりやすい構成として、PythonのバックエンドとしてFlaskを使用し、WPFを使用してGUIを構築する方法を考えてみましょう。以下はその基本的な手順です。
… 省略
PythonバックエンドのWPFアプリ
プロンプト
以下のプロンプトを入力しました。
バックエンドをpython+Flaskでつくり、GUIをWPFで作るという構成を考えます。
そのサンプルとして以下の仕様ようなアプリを作ります。
GUI
+入力テキストボックス
+出力テキストボックス
+「2乗を計算する」ボタン
動作
+入力テキストボックスに数値(浮動小数点)を入れると、バックエンドのpythonプログラムがその数値の2乗を計算し、その答えが出力テキストボックスに表示される。
条件
+pythonコードは、pyton3.8を想定し、Flaskを使ってください。
+WPFは、Visual Studio Express 2017を使用することを想定してください。
要求
+以上の仕様を満たすアプリのコード(xaml, xaml.cs, python)を丁寧なコメントを入れて作ってください。
+ライブラリーを使用する場合には、ライブラリーのインストール方法も教えてください。
ChatGPTの出力
まず、Python側のプログラムです。
# backend.py
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/calculate_square', methods=['POST'])
def calculate_square():
data = request.json
number = data['number']
result = number ** 2
return jsonify({'result': result})
if __name__ == '__main__':
app.run(debug=True)
MainWindow.xamlです。
<Window x:Class="CalculatorApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Calculator" Height="250" Width="400">
<Grid>
<TextBox Name="inputTextBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20" Width="100"/>
<Button Name="calculateButton" Content="2乗を計算する" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="130,20,0,0" Width="120" Click="CalculateButton_Click"/>
<TextBox Name="outputTextBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,60,0,0" Width="300" Height="100" IsReadOnly="True"/>
</Grid>
</Window>
MainWindow.xaml.csです。
using System;
using System.Net.Http;
using System.Text;
using System.Windows;
namespace CalculatorApp
{
public partial class MainWindow : Window
{
private const string BackendUrl = "http://localhost:5000/calculate_square"; // Replace with your backend URL
public MainWindow()
{
InitializeComponent();
}
private async void CalculateButton_Click(object sender, RoutedEventArgs e)
{
if (double.TryParse(inputTextBox.Text, out double number))
{
using (var client = new HttpClient())
{
var data = new { number = number };
var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(BackendUrl, content);
var responseJson = await response.Content.ReadAsStringAsync();
dynamic resultData = Newtonsoft.Json.JsonConvert.DeserializeObject(responseJson);
double result = resultData.result;
outputTextBox.Text = $"入力の2乗: {result}";
}
}
else
{
outputTextBox.Text = "有効な数値を入力してください。";
}
}
}
}
実行
Python環境には、”pip install Flask”でFlaskをインストールして、”python background.py” でプログラムを実行します。
Visual Studio側では、MainWindow.xamlとMainWindow.xaml.cs をコピペで作り実行します。
その結果、次のようなGUIが表示されました。
上のテキストボックスに11.11と入れて、「2乗を計算する」を押すと、下に「入力の2乗:123.4321」と答えが表示されました。
ちゃんと動いているようです。


コメントを残す