ここでは、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」と答えが表示されました。

ちゃんと動いているようです。