2012-02-15 7 views
11

私はGUIツールボックスを使ってMatlabでGUIを開発しましたが、今は私のプロジェクトに共通のlispを使用しています。私は、おそらくプッシュボタン、ラジオボタン、Figureウィンドウなどを持つGUIを開発する必要があります。Common Lispグラフィカルユーザインタフェース開発

これはCommon Lispでこれを実行することが可能かどうか、ツールボックスがあるかどうか、かなり使いやすく、学びやすい。私は強力なプログラミングの背景がないので、可能であれば、高度なものを避けようとします。
ありがとうございます。

+0

'Common LispのGUIツールキットのためのWeb検索'がいくつか登場するようだから、実現可能性は保証されていると思う。 – phils

答えて

7

はTkのGUIツールキットとのインターフェースのラッパーである、LTKを見てみましょう。簡単に始めることができ、簡単なアプリケーションで十分です。

+0

私はLtkをプロットツールとしても使用できますか?またはgnuplotやその他のプロットツールを使用する方が良いでしょうか? – YBE

+0

私はそれを一度も使用したことはありませんが、cgn(http://www.cliki.net/cgn)がトリックを行うようです。ちょうどquicklispでインストールし、テストコードを正常に実行しました。 –

4

あなたがUnix-ish環境にいる場合は、cl-gtk2またはcommonqt、さらにはCLIMを試してみるとよいでしょう。また、UIツールキットの選択は、使用しているCommon Lispの実装によって異なります。 Lisp WorksAllegro CLにはそれぞれ独自のUIツールキットが付属しています。これは多かれ少なかれプラットフォームに依存しません。

9

二I LTKを使用するための提案。

しかし、あなたの要件がLTKが提供するものを超えて成長した場合(基本的なJavaScript + HTML + CSSの学習に多少時間を費やす余裕があります - これはおそらく質問で言及した「高度なもの」を避けていることを意味します)アプリケーション用のWebインターフェイスを作成すると便利です。

私はCLでポータブル GUIを書くに無料でまともな代替手段を見つけることができませんでしたので、私が代わりにデスクトップアプリのWebアプリケーションを作成する(およびデスクトップアプリケーションとしてそれらを使用することにしました - つまり、どこのコンピュータにサーバを起動します私はアプリケーションを使用し、ブラウザでページを開き、デスクトップアプリケーションとして扱うことを意味します。JavaScriptなどではできないことがあれば、ネットワークにアクセスするなど、サーバー上で行うことができます)。これは大きな移植性の利点があります(今は、SBCLを使用してLinux上で開発し、Clozure CLを使用してWindowsにデプロイするということです)。 (ブラウザの非互換性を飼いならすために)(CLize JavaScriptに)

私は(コンテンツをホストする)Hunchentootを使用して、このようなアプリケーションの進展に伴い、現在はかなり満足している+ Parenscript + JQuery + JQueryUI(ブラウザで書き込みUIを飼いならすために)。 JSのパフォーマンスについて心配しないでください。最近はpretty spectacularです(IE9より前のIEを無視して、最新のブラウザを使用することができれば)。数週間前、私はa simple 'hello world'-type application(JQueryUIを除く)のすべてを使って書きましたが、簡単に追加できます。それは私が意味するものの最小の例として有用かもしれません。

1

これまでのいくつかの提案で、私の経験ではQtとGtkのバインディングが完了しましたが、まだC/C++のビットを感じています。私はLispWorksの無料版で遊んでいましたが、私はCAPIにかなり感銘を受けましたが、この時点で商用ライセンスに投資する必要はなく(例え)アプリ。

次に、WebベースのUIを調べるための推奨事項を示します。私がブラウザをプログラミングすることを嫌うのと同じくらい、最近では耐え忍ぶための道具がたくさんあり、楽しむこともできるでしょう。Restas(Hunchentootに基づくフレームワーク)はかなり甘いです。

1

すでに(いつも私のためにうまく働いた)LTKを述べたように、私はまた、Cells-Gtkの好きですほかに、理由はティルトンのCellsは、私の意見では、GUIのコードを書くにすてきなアプローチです。

たとえば、私がCells-Gtkを使い始めたときに書いた非常にシンプルな華氏/摂氏(逆もまた同様)コンバータのコードを以下に示します。

(defun fahrenheit->celsius (fahrenheit/string) 
    (princ-to-string (handler-case 
         (* (- (read-from-string fahrenheit/string nil) 32) 5/9) 
        (error() "NaN")))) 

(defun celsius->fahrenheit (celsius/string) 
    (princ-to-string (handler-case 
         (+ (* (read-from-string celsius/string nil) 9/5) 32) 
        (error() "NaN")))) 

(defmd celsius-fahrenheit-converter (gtk-app) 
    :title "°C <-> °F" 
    :position :center 
    :kids 
    (kids-list? 
    (mk-vbox 
    :kids 
    (kids-list? 
    (mk-hbox 
     :kids 
     (kids-list? 
     (mk-entry :md-name :celsius 
       :init "0" 
       :text (c? (fahrenheit->celsius (widget-value :fahrenheit)))) 
     (mk-label :text "°C"))) 
    (mk-hbox 
     :kids 
     (kids-list? 
     (mk-entry :md-name :fahrenheit 
       :text (c? (celsius->fahrenheit (widget-value :celsius)))) 
     (mk-label :text "°F"))))))) 

そのようには、「計算」ボタンか何かはありません - ちょうど1つの入力フィールドの値を変更し、他の一つはその場で更新されます。ご覧のように、Cellsはウィジェットの状態変更を自動的に処理します。正しい「配管」だけを指定する必要があります。

(このコードは、数年前である、と私はATMそれをテストするための細胞なし-GTKのインストールを持っていないが、私はそれを書いたとき、それが正常に動作するために使用されます。)