我以前用Matlab的GUI工具箱开发过GUI,现在我正在使用Common Lisp进行我的项目。我需要开发一个可能包含推按钮、单选按钮、图形窗口等的GUI。
我想知道在Common Lisp中是否可行,并且是否有易于使用和学习的工具箱、库。由于我没有很强的编程背景,如果可能的话,我会避免使用高级功能。
非常感谢您提前的帮助。
我以前用Matlab的GUI工具箱开发过GUI,现在我正在使用Common Lisp进行我的项目。我需要开发一个可能包含推按钮、单选按钮、图形窗口等的GUI。
我想知道在Common Lisp中是否可行,并且是否有易于使用和学习的工具箱、库。由于我没有很强的编程背景,如果可能的话,我会避免使用高级功能。
非常感谢您提前的帮助。
我目前对这种应用程序的进展非常满意,使用Hunchentoot(来托管内容)+ Parenscript(将JavaScript转换为Common Lisp)+ JQuery(解决浏览器兼容性问题)+ JQueryUI(在浏览器中编写用户界面)。不用担心JS性能问题,现在它相当出色(好吧,如果您可以忽略IE9之前的IE版本并使用最新的浏览器)。几周前,我使用所有这些工具(除了JQueryUI,但很容易添加)编写了一个简单的“hello world”类型的应用程序;它可能是一个最小示例,说明我的意思。
看看LTK,它是与Tk GUI工具包进行接口的包装器。使用起来非常简单,对于简单应用程序应该足够。
(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")))))))
没有“计算”按钮或类似的东西 - 只需更改一个输入字段的值,另一个字段将即时更新。正如您所看到的,Cells自动处理小部件的状态更改 - 只需要提供正确的“管道”。
(这段代码已经几年了,我没有Cells-Gtk安装来测试它,但当我编写它时它可以正常工作。)
我已经尝试了一些建议,就我的经验而言,Qt和Gtk绑定可以完成工作,但它们仍然感觉有点C/C++的风格,这不是我喜欢的。我确实玩过LispWorks的免费版本,并对CAPI印象深刻,但我目前没有必要(也没有能力)投资商业许可证,因此除了玩弄示例应用程序之外,我从未做过其他任何事情。
我赞成建议去研究基于Web的UI。尽管我不喜欢编写浏览器程序,但现在有很多工具可以使其变得容忍,甚至可能变得愉悦,Restas(基于Hunchentoot的框架)非常棒。
common lisp gui toolkit
的网络结果似乎有很多,因此我认为可行性是有保证的。 - phils