首页 文章

非常简单,简洁易用的GUI编程“框架”[关闭]

提问于
浏览
59

请列出允许快速编写GUI应用程序的GUI编程库,工具包,框架 . 我的意思是这样的

  • GUI完全用人类可读(和人类可写)的纯文本文件(代码)描述

  • 代码简洁(每个小部件/事件对有1或2行代码),适合脚本编写
    从代码(嵌入小部件和事件流)中可以明显看出

  • GUI的结构和操作
    隐藏了有关如何构建GUI的

  • 详细信息(如mainloop,附加事件监听器等)
    支持

  • 自动布局(vbox,hbox等)

正如答案所暗示的那样,这可以定义为声明性GUI编程,但不一定是这样 . 任何方法都可以,如果它工作,易于使用和简洁 .

有一些像这样的GUI库/工具包 . 它们列在下面 . 如果您发现缺少合格工具包,请扩展列表 . 指出项目是否是跨平台,成熟,活跃,并尽可能提供示例 .

请使用此wiki仅讨论开源项目 .

这是到目前为止的列表(按字母顺序排列):

Fudgets

Fudgets是一个Haskell库 . 平台:Unix . 状态:实验,但仍保持 . 一个例子:

import Fudgets
  main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))

Fudgets example screenshot

(来源:picamatic.com)

GNUstep文艺复兴

Renaissance允许用简单的XML描述GUI . 平台:OSX / GNUstep . 状态:GNUstep的一部分 . 以下示例:

<window title="Example">
  <vbox>
    <label font="big">
      Click the button below to quit the application
    </label>
    <button title="Quit" action="terminate:"/>
  </vbox>
</window>

Renaissance example screenshot

(来源:picamatic.com)

HTML

基于HTML的GUI(HTML JS) . 跨平台,成熟 . 可以完全在客户端使用 .

寻找一个不错的“helloworld”示例 .

HTML GUI example

(来源:picamatic.com)

JavaFX

JavaFX可用于独立(桌面)应用程序以及Web应用程序 . 不完全跨平台,尚未完全开源 . 状态:1.0发布 . 一个例子:

Frame {
    content: Button {
      text: "Press Me"
      action: operation() {
         System.out.println("You pressed me");
      }
    }
    visible: true
  }

需要截图 .

Phooey

Phooey是另一个Haskell库 . 跨平台(wxWidgets),HTML JS后端计划 . 成熟而活跃 . 一个例子(比helloworld多一点):

ui1 :: UI ()
  ui1 = title "Shopping List" $
        do a <- title "apples"  $ islider (0,10) 3
           b <- title "bananas" $ islider (0,10) 7
           title "total" $ showDisplay (liftA2 (+) a b)

Phooey example screenshot

(来源:picamatic.com)

PythonCard

PythonCard描述了Python字典中的GUI . 跨平台(wxWidgets) . 有些应用使用它,但项目似乎停滞不前 . 有一个活跃的分叉 .

我跳过PythonCard example,因为它对比赛来说太冗长了 .

PythonCard example screenshot

(来源:picamatic.com)

鞋子

Shoes for Ruby . 平台:Win / OSX / GTK . 现状:年轻但活跃 . 最小的应用程序如下所示:

Shoes.app {
     @push = button "Push me"
     @note = para "Nothing pushed so far"
     @push.click {
        @note.replace "Aha! Click!"
     }
  }

Shoes example screenshot

(来源:picamatic.com)

Tcl / Tk

Tcl/Tk . Crossplatform(自己的小部件集) . 成熟(可能甚至过时)和活跃 . 一个例子:

#!/usr/bin/env wish
  button .hello -text "Hello, World!" -command { exit }
  pack .hello
  tkwait window .

Tcl/Tk example screenshot

(来源:picamatic.com)

tekUI

tekUI为Lua(和C) . 平台:X11,DirectFB . 状态:Alpha(可用,但API仍在发展) . 一个例子:

#/usr/bin/env lua
  ui = require "tek.ui"
  ui.Application:new {
    Children = {
      ui.Window:new  {
        Title = "Hello",
        Children = {
          ui.Text:new {
            Text = "_Hello, World!", Style = "button", Mode = "button",
          },
        },
      },
    },
  }:run()

tekUI helloworld screenshot

(来源:picamatic.com)

特雷森

Treethon for Python . 它描述了YAML文件中的GUI(YAML树中的Python) . 平台:GTK . 现状:在proress工作 . 一个简单的应用程序如下所示:

_import: gtk
  view: gtk.Window()
  add:
      - view: gtk.Button('Hello World')
        on clicked: print view.get_label()

Treethon helloworld screenshot http://treethon.googlecode.com/svn/trunk/treethon_gtk_tutorial/base.png

理查德·琼斯的未命名Python库:

这个尚未发布 . 我们的想法是使用Python上下文管理器( with keyword)来构建GUI代码 . 有关详细信息,请参阅Richard Jones' blog .

with gui.vertical:
    text = gui.label('hello!')
    items = gui.selection(['one', 'two', 'three'])
    with gui.button('click me!'):
        def on_click():
            text.value = items.value
            text.foreground = red

XUL

XUL Javascript可用于使用XULRunner和Mozilla扩展创建独立的桌面应用程序 . 成熟,开源,跨平台 .

<?xml version="1.0"?>
  <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
  <window id="main" title="My App" width="300" height="300"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <caption label="Hello World"/>
  </window>

XUL helloworld example

(来源:picamatic.com)


感谢您的贡献!

10 回答

  • 1

    不是哄骗,而是HTML .

    它是跨平台的,并在简单的文本文件中总结了gui-layout . 它绝对是成熟的,并且有很好的理解和记录 .

    有很多方法可以为动态内容模拟HTML文件,以及如果您不喜欢使用尖括号,可以将自定义语法转换为HTML的其他方法 .

    客户端脚本w / Javascript,服务器端脚本与PHP / Ruby / Python / Perl .

    它足够好了.2871549 . 没有理由必须提供它 - 如果你愿意,你可以将HTML文件分发给你的客户 - 请参阅TiddlyWiki以获得可以去的地方的一个很好的例子 .

  • 2

    你更多地将鞋子描述为GUI Domain-Specifc Language . 好吧,我说新的:Visual Basic表单,如果你看看IDE设计师的背后,是声明性的 . 因此,更进一步,Oracle的SQL * Forms,虽然用文本编辑器组装它们是一个过程只有最勇敢的人才能承担 .

    为了向列表中添加另一个,Microsoft有XAML,其中描述了为WPF构建的GUI .

    虽然提到的一些方案相当简单,但声明性定义的GUI可能与代码中定义的任何内容一样复杂,它们只是更容易和更简洁:它们说“你想要发生什么”并将其留给底层框架来处理“如何” .

  • 2

    TCL/TK是一种用于以交互方式构建GUI的脚本语言 . 它适用于各种平台,包括Unix,Windows和Mac OS X.

  • -2

    睡衣 - http://pyjs.org - 它's a desktop widget set, disguised as an AJAX-based web 2.0 widget set. it' s非常不像我实际将它移植到桌面的Web小部件集 - http://pyjd.org - 使用webkit(adobe AIR中的相同引擎,google chrome,safari等)

    这是“你好世界”:

    from pyjamas.ui.RootPanel import RootPanel
    from pyjamas.ui.Button import Button
    from pyjamas import Window
    
    def greet(fred):
        Window.alert("Hello, AJAX!")
    
    if __name__ == '__main__':
        b = Button("Click me", greet)
        RootPanel().add(b)
    

    这会立即回答五个要求中的前四个 . 要求5由此实现:

    from pyjamas.ui.RootPanel import RootPanel
    from pyjamas.ui.HorizontalPanel import HorizontalPanel
    from pyjamas.ui.HTML import HTML
    
    p = HorizontalPanel()
    p.add(HTML("<b>Hello</b>"))
    p.add(HTML("World"))
    RootPanel().add(p)
    

    它不会变得更简单 .

  • 2

    XUL(它非常易于使用,功能强大 - 很多Firefox都使用XUL实现GUI结构,javascript用于逻辑处理)

    XUL tutorial有一些很好的例子 . 这是tabboxes的一个 . 页面底部的那个有可切换的标签,按钮,编辑框和组框,而且非常简单(没有Javascript / CSS / XBL /键绑定/等) . 然后他们添加progressively more stuff,这是指定它的文件长度的很多功能 . (至少在你开始添加javascript来处理有问题的逻辑之前)如果我必须在Win32中做这样的事情,那将是一个真正的痛苦 .

  • 3

    wxLua是Lua的wxWidgets库的包装器 . 它使用Connect方法将gui小部件事件附加到函数(函数是JS中的第一类) .

  • 7

    GTK-server非常易于使用,可以使用30多种语言,包括Bash和Visual Basic .

  • 16

    SDL/Swing非常简洁,可读,不引人注目(283k lib,没有依赖关系)并且易于使用 . 例:

    menus {
        "File" {
            "Open" do="open" // calls "open()" in the controller
            "---"
            "Exit" do="exit"
        }
    }
    

    它的开源,但得到Ikayzo.com的商业支持 . .NET和iOS的端口正在进行中 .

  • 2

    我今天遇到了SDL/Swing .

  • 6

    如果你在.NET平台上,你应该看看XAML

相关问题