##お手軽Linux(Ubuntu)アプリ開発 初級 後編
2021/4月追記
Rider .net5 でのGUI開発に移行しています
UbuntuとRiderとC# GUIアプリの開発
####開発の流れ
- DataGridViewとModelのバインディングの実現 TreeView
- Jestson Nanoへのデプロイの仕方 MacからRaspberry PiにRealVNCで接続するメモ
- 開発のコツ、デザイナーツールの操作ヒント
####デザインの変更の仕方
MainWindowをクリックするとGUIデザイナーツールが立ち上がります。ツールボックスからパーツをドラッグします。
VBoxの中にFixedを入れた後、Fixedの高さを設定することでボックスの中のレイアウトを調整できます
#####公式の開発ガイド
ボタンコントロールの解説
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でビルドする」を無効にする**
これは、新しいプロジェクトを開始する前にMonodevelopで行う必要がある設定です。
設定の下で検索し、「xbuildの代わりにMSBuildで作成する」を無効にします
#####Macでは動いたがLinux上で動かなかった時のデバッグの仕方
monodevelopをインストールし立ち上げる
$ monodevelop
VisualStudioのSINファイルを読み込ませデバッグする
WindowsのVisualStudioSinファイルとMacのVisulStudioファイルは互換性がある
####Jetson Nanoへのデプロイ
-
NetTalkを使いマウントさせる
sudo apt-get install netatalk
https://studio.beatnix.co.jp/diary/apple/mac2raspberry-pi/
https://qiita.com/junkoda/items/d024ee0bf6c50d2f3cc4 -
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を押すと自動生成される
#####ドキュメントアウトラインを表示すると便利
#####VBoxとHBoxを使ってレイアウトし、中にボタンやTreeViewを配置していく
公式動画にレイアウトを作成していく解説があります
#####FatViewController対策 partialクラスを使いクラスをカテゴリー分けした
#####GTkのサンプルはhotexamplesというサイトでGitに上がっているソースを調べられる
gitから上がっているソースを一覧でてきます
####c# gtk hotexamples メソッド名などで検索
このようにGitHubのGTKのソースを閲覧できるサイトを見つけた
#####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アプリ開発 パーツサンプル集] (https://qiita.com/tana_/items/3114b715586a5f83cd8c)