MacのGUI作るのに「Gtk#」使っている人を見ないのでちょっと触ってみました。
(「Xamarin.Form」はMac非対応です。
「Xamarin.Mac」から「cocoa」のUIを使った方がMacライクなUIになります。)
「Gtk#」は「Gtk+」のC#版です。
ついでに「Gtk#」を使って、
Windowsとのクロスプラットフォーム開発がどの程度できるかテストしてみます。
Macで「Gtk#」を使ってみる
とりあえず新しいプロジェクトを作成。
「Gtk#」を選びます。
私は「testGtk」の名前で新規プロジェクトを作成しました。
↓
「ユーザーインターフェィス」の「MainWindow」を選択すると、
無事に「デザイナ」が立ち上がりました。
↓
コントロールを配置します。
「ツールボックス」から「Fixed」を配置。
↓
続いて「Button」と「Label」を配置します。
↓
「button1」のプロパティを変更します。
「Button Properties」の「Label」を
「GtkButton」から「開始」に変更して下さい。
「Button Properties」の「Label」を
「GtkButton」から「開始」に変更して下さい。
「デザイナ」の下にチラ見している「ソース」を選択すると、
ソースコードが表示されます。
↓「MainWindow」クラス内の一番下に以下のコードを追加します。
//ボタンクリックイベント protected void ButtonClicked_Event(object sender, EventArgs e) { var task = System.Threading.Tasks.Task.Run(new System.Action(()=>{ for (int i = 0; i < 6; i++) { label1.Text = zenRep(i.ToString()) + "秒"; System.Threading.Thread.Sleep(1000); } })); } // 半角文字列を全角文字列へ変換 private string zenRep(string s) { var resultStr = s; resultStr = System.Text.RegularExpressions.Regex.Replace(resultStr, "[0-9]", (p) => ((char)(p.Value[0] - '0' + '0')).ToString()); resultStr = System.Text.RegularExpressions.Regex.Replace(resultStr, "[A-Z]", (p) => ((char)(p.Value[0] - 'A' + 'A')).ToString()); return resultStr; }↓
コードを追加したら、表示を「デザイナ」に戻して
「ボタン」の「シグナル」の「clicekd」イベントの「ハンドラー」へ
クリックイベントのメソッド名を入れます。
「ButtonClicked_Event」と入力して下さい。
↓
これで完成です。
「コマンド+エンター」等で「実行」してみましょう。
以下のようなFormが表示されます。
↓
開始ボタンを押してみると…
無事「0秒」〜「5秒」までカウントされます。
クラスプラットフォーム化
クロスプラットフォームで動くかテストする為に、
完成した「VisualStudio for Mac」の「ソリューション」をフォルダごと
「Windows」側へコピーするか、共有して下さい。
「Gtk#for.NET」を「Windows」にインストールします。
「Windows」で以下のサイトへ行きます。
http://www.mono-project.com/download/#download-win
以下のファイルをダウンロード。
↓
インストールを進めて下さい。
問題なくインストールが終了したら、
「Windows」の「VisualStudio」で「ソリューション」を開き、
実行してみて下さい。
↓
「Windows」側でも無事動きました。
「0秒」〜「5秒」までカウントされます。
非同期処理も問題無く動いています。
感想
簡単な物であればすぐ実用に使えそうな気がします。
UIの見え方は「Gtk#」独特の物となりますが、
「Mac」と「Windows」のUIを共通で気軽に作れるのは凄く魅力的です。
ただ今の所、
プラットフォーム毎のショートカットの制御がわかりません。
誰か教えて下さい…
http://www.mono-project.com/docs/gui/gtksharp/tutorials/
「Windows」側でのGUIデザイナ用エディタについて…
「Stetic」→「Monodevelop」「Xamarin Studio」に含まれている。「Gtk2」のみ対応
「Glade」→「Gtk2」「Gtk3」両方に対応
「VisualStudio」に組み込まれたGUIデザイナは今の処存在しない。
直接コードで書く事も選択肢に入るかも…。
http://grbd.github.io/posts/2016/01/29/gtksharp-part-2-setting-up-glade/
補足
「Gtk#」でダイアログを表示させる。
//「Gtk#」のダイアログ //「using」は使えないので注意 var md = new MessageDialog( this, DialogFlags.Modal, MessageType.Info, ButtonsType.Ok, "てすと\r\nテスト"); md.Run(); md.Destroy(); //←「Dispose()」は使えないので注意ちょっと面倒な印象。
参考→http://7shi.hateblo.jp/entry/2012/04/24/233941
個人的メモ…
MacOS10.11.6上でlabelの半角欧文が文字化けした際、
解決はしなかったが勉強になったサイト。
「Gtk#」の日本語が文字化けに関する対処が書かれている。
http://kki-zakki.blogspot.jp/2008/12/monodevelop-20-alphamac-os-x.html
https://discussionsjapan.apple.com/thread/10052914?start=0
「gtkrc」ファイルをいじる
→「Visual Studio.app/Contents/Resources/lib/monodevelop/bin」
http://reiji1020.hatenablog.com/entry/2012/07/12/203443
フォント「サンフランシスコ」入れてもダメだった
https://www.ipentec.com/document/document.aspx?page=software-font-download-apple-san-francisco
https://developer.apple.com/fonts/
欧文系は全部試してダメだったので、たぶん日本語フォントっぽい。
↓
「SuitcaseFusion」の問題だったみたい。
「Helvetica」をシステムから引っ張り出して、
「SuitcaseFusion」へ登録し直したら解決した。
winとmacのクロスプラットフォームなGUIならば
「electron.net」を検討してみるのも良いかも
teratail:Macで開発できるまでの手間が少なくて、
MacとWindowsで動作するGUIの
Twitterクライアントを作るにはどの言語が良いでしょうか。
https://teratail.com/questions/65420
0 件のコメント:
コメントを投稿