search
LoginSignup
13

More than 1 year has passed since last update.

posted at

updated at

お手軽Linux(Ubuntu) GUIアプリ開発 初級 後編

お手軽Linux(Ubuntu)アプリ開発 初級 後編

2021/4月追記
Rider .net5 でのGUI開発に移行しています
UbuntuとRiderとC# GUIアプリの開発

Git Sourth

スクリーンショット 2020-04-11 21.51.04.png

開発の流れ

  1. DataGridViewとModelのバインディングの実現 TreeView
  2. Jestson Nanoへのデプロイの仕方 MacからRaspberry PiにRealVNCで接続するメモ
  3. 開発のコツ、デザイナーツールの操作ヒント

デザインの変更の仕方

MainWindowをクリックするとGUIデザイナーツールが立ち上がります。ツールボックスからパーツをドラッグします。
スクリーンショット 2020-04-12 2.14.06.png

VBoxの中にFixedを入れた後、Fixedの高さを設定することでボックスの中のレイアウトを調整できます
スクリーンショット 2020-04-18 11.36.39.png

公式の開発ガイド

ボタンコントロールの解説

TreeViewのコーディングの書き方

アプリの内容について

Linux上で動くデータを管理するアプリです。一覧 Insert Update Deleteが動作をします。Sqlite3を使っています

Linuxでの動かし方

GTKSharpをインストールする

gladeをインストールする

$ sudo apt-get install glade

LinuxにMonoDevelopをインストールする

追記 4/14
必ずユーザー設定 ー プロジェクト ー ビルドから
「xbuildの代わりにMSBuildでビルドする」を無効にすること

Microsoft.CSharp.Core.targetsファイルがないエラー

“/home/pi/,cache/MonoDevelop/7.0/MSBuild/1068_1/Microsoft.CSharp.Core.targetsが見つかりませんでした。

と出た場合は

ソリューション ー 参照 ー Microsoft.CSharpを追加や更新
それでもエラーが出る場合は
Jetson Nano ー 表示 ー 隠しフォルダを表示する
MSBuild / 以下複数フォルダがある場合は両方削除する
再度Microsoft.CSharpを追加

追記 4/14
ユーザー設定 ー プロジェクト ー ビルド
エラーが出るので「xbuildの代わりにMSBuildでビルドする」を無効にする

スクリーンショット 2020-04-14 11.13.57.png

これは、新しいプロジェクトを開始する前にMonodevelopで行う必要がある設定です。
設定の下で検索し、「xbuildの代わりにMSBuildで作成する」を無効にします

Macでは動いたがLinux上で動かなかった時のデバッグの仕方

monodevelopをインストールし立ち上げる

$ monodevelop

VisualStudioのSINファイルを読み込ませデバッグする
WindowsのVisualStudioSinファイルとMacのVisulStudioファイルは互換性がある

Jetson Nanoへのデプロイ

  1. NetTalkを使いマウントさせる
     sudo apt-get install netatalk
    https://studio.beatnix.co.jp/diary/apple/mac2raspberry-pi/
    https://qiita.com/junkoda/items/d024ee0bf6c50d2f3cc4

  2. RealVncを使う

 Jestson NanoにプレインストールされているRealVncを使います。MacからJestson NanoにRealVncで接続する
 Finderからも接続できますがファイル転送できないため、RealVncViewrを使って接続します

LinuxGUIアプリでのデータバインディングについて

公式サイトにバインディングのやり方が書いてあります

バインディング 開発のしやすさ 感想

WindowsFormバインディング > Cococaバインディング >>> Gtkバインディング

種類 感想
WindowsForm パーツのプロパティウィンドウからクラスプロパティ名を選択 プロパティウィンドウからDBと接続
CoCoa  StoryBoardにでパーツを選択、ArrayControllerなどをセットしDBと接続、パーツのプロパティウィンドウで設定 コーディングも少々
Gtk  コーディングで実装

Linux上でのファイルの実行の仕方

アイコンファイルをダブルクリックをする
$ mono アプリパス

バインディングライブラリ

バインディングをシンプルに生成するライブラリを作りました。

void _mkTreeView() {

    Gtk.TreeViewColumnEx artistColumn = new Gtk.TreeViewColumnEx();
    artistColumn._mkCellRendererText();
    artistColumn.Sizing = TreeViewColumnSizing.Fixed;
    artistColumn.FixedWidth = 200;
    artistColumn.Title = "Artist";
    artistColumn.bindingPropertyName = "Artist";

    treeview.AppendColumn(artistColumn);

    artistColumn._mkBinding();

    this.ShowAll();

}

TreeViewColumnEx

ファイルのバンドル化

monoをインストールしなくても実行するやり方があるようです。dllをバンドルして配布できるようです。
.dmg形式にするやり方があるみたいです。
http://wraikny.hatenablog.com/entry/2018/03/29/225021
https://qiita.com/econa77/items/d0e7d3a75d8fd3bb7777

exeの暗号化

.NETプログラムの難読化ツールの紹介と使ってみた

以前Babelを買ったことがあり、無難に動作し価格もお手頃でした。

Sqliteの暗号化

sqlcipher

sqlcipherというソフトがあり、オープンソースから実装すれば無料で利用できます。

SQLite3 DBをファイルごとパスワード暗号化・復号する

感想

GUIを使って簡単にデータアプリを作ることができました
treeViewやバインディングについてはWindowsやCocoaの方が開発しやすい。

GTKでも何か便利な作り方があれば教えてください。

開発、デザイナーツールの操作のコツ

イベントハンドラーメソッド文はClickedを押すと自動生成される

スクリーンショット 2020-04-10 19.13.40.png

ドキュメントアウトラインを表示すると便利

スクリーンショット 2020-04-10 19.12.08.png

VBoxとHBoxを使ってレイアウトし、中にボタンやTreeViewを配置していく

公式動画にレイアウトを作成していく解説があります
スクリーンショット 2020-04-10 19.24.12.png

FatViewController対策 partialクラスを使いクラスをカテゴリー分けした

スクリーンショット 2020-04-10 19.15.12.png

GTkのサンプルはhotexamplesというサイトでGitに上がっているソースを調べられる

gitから上がっているソースを一覧でてきます

c# gtk hotexamples メソッド名などで検索

スクリーンショット 2020-04-09 21.29.09.png

このようにGitHubのGTKのソースを閲覧できるサイトを見つけた

Sqliteの管理ソフト

有料ではありますが便利なソフトです

Sqlite管理

使用を考えている用途

Raspberry Pi上でデータベースアプリとしての利用を考えています。
センサーの取ってきた情報を一覧で表示したり、送信したり、管理アプリを考えています

C#側
データベースアプリ Sqlite3を利用する
Swagger CodegenでAPIクライアントソースの書き出し
Tensorflow(C#のGPU版は速度が速い)
OpenCVのC#版
picameraのC#版
サードパーティへのWebAPI通信ライブラリー Swaggerを併用
IO関連
pythonスクリプトの実行

Python側
pythonが書かれた各種センサーはpythonで書きます
IO関連

センサーもC#で書かれたものがあればC#で書きます

お手軽Linux(Ubunch) GUIアプリ開発 初級 前編
お手軽Linux(Ubunch) Guiアプリ開発 入門
お手軽Linux(Ubunch) GUIアプリ開発 パーツサンプル集

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
13