当前位置:  开发笔记 > 编程语言 > 正文

非常简单,简洁易用的GUI编程"框架"

如何解决《非常简单,简洁易用的GUI编程"框架"》经验,为你挑选了3个好方法。

请列出允许快速编写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示例截图
(来源:picamatic.com)

GNUstep文艺复兴

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


  
    
    

文艺复兴时期的例子截图
(来源:picamatic.com)

HTML

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

寻找一个不错的"helloworld"示例.

HTML GUI示例
(来源:picamatic.com)

JavaFX的

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

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

需要截图.

阿福

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示例截图
(来源:picamatic.com)

PythonCard

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

我跳过了PythonCard的例子,因为它对于比赛来说太冗长了.

PythonCard示例截图
(来源:picamatic.com)

红宝石鞋.平台:Win/OSX/GTK +.现状:年轻但活跃.最小的应用程序如下所示:

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

鞋子示例截图
(来源:picamatic.com)

的Tcl/Tk

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

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

Tcl/Tk示例截图
(来源:picamatic.com)

tekUI

Lua(和C)的tekUI.平台: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截图
(来源:picamatic.com)

Treethon

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截图http://treethon.googlecode.com/svn/trunk/treethon_gtk_tutorial/base.png

但Richard Jones的未命名Python库:

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

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扩展创建独立的桌面应用程序.成熟,开源,跨平台.

  
  
  
    
  

XUL helloworld示例
(来源:picamatic.com)


感谢您的贡献!



1> rampion..:

不是哄骗,而是HTML.

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

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

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

它并不适合所有用途,但对许多人而言,它已经足够好了.没有理由必须提供它 - 如果你愿意,你可以将HTML文件分发给你的客户 - 请参阅TiddlyWiki,了解可以去哪里的好例子.


基于Web的应用程序是可以的,但由于不可避免的客户端 - 服务器交互,事物的整体复杂性更高.此外,即使使用最新的web和js框架,每个"事件"的代码行数也会更高.如果应用程序不是完全由用户请求驱动的,那么事情变得更加棘手.
您与TiddlyWiki的示例使我确信它适用于纯客户端GUI.

2> Mike Woodhou..:

除了鞋子之外,你所描述的是声明性编程的新奇概念.我将鞋子更多地描述为GUI 域特定语言.好吧,我说新的:Visual Basic表单,如果你看看IDE设计师的背后,是声明性的.因此,更进一步,Oracle的SQL*表单,尽管用文本编辑器组装它们只是一个非常最勇敢的过程.

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

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



3> mouviciel..:

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


Tk的最新版本已经解决了字体问题,现在支持抗锯齿字体.就个人而言,我更关心UI工具包中的功能和生产力而不是漂亮的字体,在这方面,Tk几乎没有同行.
推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有