2012-02-15 4 views
11

GUI 도구 상자를 사용하여 Matlab에서 GUI를 개발했으며 지금은 프로젝트에 공통 lisp을 사용하고 있습니다. 나는 푸시 버튼, 라디오 버튼, 그림 창 등을 가지고있는 GUI를 개발할 필요가있다.Common Lisp 그래픽 사용자 인터페이스 개발

Common Lisp에서 이것을 수행 할 수 있는지 여부와 툴박스가 있는지 여부를 알고 싶다. 사용하기 쉽고 배우기 쉽습니다. 나는 강력한 프로그래밍 배경이 없기 때문에 가능하면 고급 자료를 피하려고 노력할 것입니다.
미리 감사드립니다.

+0

'CL의 GUI 툴킷에 대한 웹 검색 '는 여러 차례 나타날 것으로 보이므로 타당성이 보장된다고 생각한다. – phils

답변

7

Tk GUI 툴킷과 인터페이스하기위한 래퍼 인 LTK을 살펴보십시오. 시작하기가 매우 쉽고 간단한 응용 프로그램으로 충분합니다.

+0

나는 Ltk를 플롯 도구로도 사용할 수 있습니까? 또는 gnuplot 또는 다른 플롯 도구를 사용하는 것이 더 좋을까요? – YBE

+0

나는 그런 식으로 그것을 사용한 적이 있지만, CGN은 (http://www.cliki.net/cgn) 트릭을 할 것 - 단지 quicklisp로를 설치하고 성공적으로 테스트 코드를 실행합니다. –

4

유닉스 환경에있는 경우 cl-gtk2 또는 commonqt 또는 심지어 CLIM을 시도 할 수 있습니다. 게다가 UI 툴킷의 선택은 사용중인 Common Lisp 구현에 따라 다릅니다. Lisp WorksAllegro CL은 둘 다 플랫폼 독립적 인 (다소간) 독립적 인 UI 툴킷을 제공합니다.

9

두 번째 제안은 LTK입니다.

그러나 LTK가 제공하는 것 이상으로 요구 사항이 커지면 (기본 JavaScript + HTML + CSS를 배우는 데 시간을 할애 할 수 있음 - 질문에서 언급 한 "고급 기능"을 피할 수 없음), 그것은 당신의 어플리케이션을위한 웹 인터페이스를 만드는 데 유용합니다.

CL에서 휴대용 GUI를 작성하는 무료 무료 대안을 찾을 수 없기 때문에 데스크톱 앱 대신 웹 앱을 작성하여 데스크톱 앱으로 사용하기로 결정했습니다. 즉, 컴퓨터에서 서버를 시작합니다. 내 말은 응용 프로그램을 사용하고 브라우저에서 페이지를 열고 데스크톱 응용 프로그램으로 취급하는 것을 의미하며 JavaScript 등 네트워크에서 액세스 할 수없는 작업이 있으면 서버에서 처리합니다. 이것은 이식성이 뛰어나다는 장점이 있습니다. (지금은 SBCL을 사용하여 Linux에서 개발하고 Clozure CL을 사용하여 Windows에 배포한다는 것을 의미합니다. Hunchentoot이 (CLize 자바 스크립트) + Parenscript를 (내용을 호스트)를 사용하여 나는 현재 이러한 응용 프로그램의 진행과 함께 매우 행복 해요

, + JQuery가 (브라우저 호환성을 길들이기) ​​+ JQueryUI이 (브라우저에서 쓰기 UI를 길들이기). JS 성능에 대해 걱정하지 마십시오. 요즘은 pretty spectacular입니다 (IE9 이전의 IE를 무시하고 최신 브라우저를 사용할 수있는 경우). 몇 주 전에 나는 이들 모두를 사용하여 a simple 'hello world'-type application을 작성했습니다 (JQueryUI를 제외하고 추가하기 쉽습니다). 그것은 제가 의미하는 바의 최소한의 예로서 유용 할 수 있습니다.

1

저는 지금까지 몇 가지 제안 사항을 가지고 놀았습니다. 제 경험상 Qt와 Gtk 바인딩이 작업을 완료하지만 여전히 마음에 들지 않는 C/C++ - ish입니다. 나는 무료 버전의 LispWorks를 가지고 놀았지만 CAPI에 상당히 감명 받았다. 그러나이 시점에서 상용 라이센스에 투자 할 필요가 없으므로 예제로 놀아 본 것 외에는 다른 일을 해본 적이 없다. 앱.

웹 기반 UI를 살펴볼 때 두 번째 권장 사항입니다. 브라우저를 프로그래밍하는 것을 싫어하는만큼, 요즘에는 참을 수 있고 어쩌면 즐겁게 만들 수있는 도구가 많이 있습니다. Restas (Hunchentoot을 기반으로하는 프레임 워크)은 꽤 멋집니다.이미 게다가

1

는 (이 항상 나를 위해 잘 작동) 틸튼의 Cells이기 때문에, 내 의견, GUI 코드를 작성에 좋은 접근 방식, Cells-Gtk 좋아도 오전 LTK을 언급했다. (여전히 LTK는 시작하기가 더 쉬울 수도 있습니다.)

예를 들어 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"))))))) 

. 당신이 볼 수 있듯이, 세포 인 타이틀 위젯의 상태 변경을 처리 - 오직 올바른 "배관"을 부여해야합니다.

(이 코드는 몇 살이고, 나는 ATM 테스트 할 세포-의 GTK이 설치되어있는,하지만 내가 쓴 때 제대로 작동하는 데 사용됩니다.)

관련 문제