web-dev-qa-db-ja.com

非常にシンプルで簡潔なGUIプログラミング「フレームワーク」

GUIアプリを書くことができるGUIプログラミングライブラリ、ツールキット、フレームワークをリストしてくださいすばやく。そういう意味で

  • GUIは完全に人間が読み取り可能な(そして人間が書き込み可能な)プレーンテキストファイル(コード)で記述されています
  • コードは簡潔であり(ウィジェット/イベントのペアごとに1行または2行のコード)、スクリプトに適しています。
  • gUIの構造と操作はコードから明らかです(ウィジェットのネストとイベントのフロー)
  • gUIを構築するhowの詳細(メインループ、イベントリスナーのアタッチなど)が非表示になっている
  • 自動レイアウトがサポートされています(vbox、hboxなど)。

回答が示唆するように、これはdeclarativeGUIプログラミングとして定義できますが、必ずしもそうであるとは限りません。それが機能し、使いやすく簡潔な方法であれば、どのような方法でもかまいません。

このようなGUIライブラリ/ツールキットがいくつかあります。それらを以下に示します。正規のツールキットがない場合は、リストを拡張してください。プロジェクトがクロスプラットフォームで、成熟していてアクティブであるかどうかを示し、可能であれば例を示します。

このwikiを使用して、オープンソースプロジェクトのみについて議論してください。

これはこれまでのリスト(アルファベット順)です。

ファッジ

Fudgets はHaskellライブラリです。プラットフォーム:Unix。ステータス:実験的ですが、維持されています。例:

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

Fudgets example screenshot
(ソース: picamatic.com

GNUstepルネサンス

Renaissance GUIを単純なXMLで記述できます。プラットフォーム: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 はもう1つの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 はGUIをPython辞書で説明しています。クロスプラットフォーム(wxWidgets)。一部のアプリはそれを使用していますが、プロジェクトが停止しているようです。アクティブなフォークがあります。

PythonCardの例 をスキップします。これは、コンテストに対して冗長すぎるためです。

PythonCard example screenshot
(ソース: picamatic.com

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 。クロスプラットフォーム(独自のウィジェットセット)。成熟しており(おそらく日付が付けられていても)、アクティブです。例:

  #!/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。ステータス:アルファ(使用可能ですが、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

Treethon Pythonの場合。 YAMLファイルでGUIを記述します(PythonのYAMLツリー)。プラットフォーム:GTK +。ステータス:仕事中。単純なアプリは次のようになります。

  _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

まだ名前がありませんPython Richard Jonesによるライブラリ:

これはまだリリースされていません。アイデアは、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拡張機能を備えたスタンドアロンのデスクトップアプリを作成できます。成熟したオープンソースのクロスプラットフォーム。

  <?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


貢献してくれてありがとう!

60
sastanin

子供ではなく、HTML。

これはクロスプラットフォームで、GUIレイアウトを単純なテキストファイルにまとめています。それは間違いなく成熟しており、よく理解され、十分に文書化されています。

動的コンテンツのHTMLファイルをテンプレート化する方法はたくさんありますが、山括弧が嫌いな場合にカスタム構文をHTMLに変換する方法は他にもあります。

Javascriptを使用したクライアント側スクリプト、PHP/Ruby/Python/Perlを使用したサーバー側スクリプト。

すべての目的に適しているわけではありませんが、多くの場合、それで十分です。それが提供される必要がある理由もありません-あなたが望むならあなたはあなたのクライアントにHTMLファイルを配布することができます-それが行くことができる良い例については TiddlyWiki を見てください。

16
rampion

あなたが説明しているのは、靴を除いて、宣言型プログラミングの新しくできた概念です。私は靴をGUIとしてより詳しく説明します ドメイン固有の言語 。 IDEデザイナの後ろを見ると、Visual Basicフォームは宣言型でした。したがって、さらに前に戻ると、OracleのSQL * Formsがありましたが、テキストエディターは、非常に勇敢な人によってのみ行われるプロセスでした。

リストに別のものを追加するために、Microsoftは [〜#〜] xaml [〜#〜] を持っています。これは、とりわけ、 [〜#〜] wpf [〜 #〜]

言及されているスキームの一部はかなり単純ですが、宣言的に定義されたGUIはコードで定義されたものと同じくらい複雑になる可能性がありますが、それらはより簡単で簡潔です。 「方法」。

7
Mike Woodhouse

TCL/TK は、GUIを対話的に構築するために使用されるスクリプト言語です。 Unix、Windows、Mac OS Xなどのさまざまなプラットフォームで利用できます。

6
mouviciel

パジャマ- http://pyjs.org -AJAXベースのWeb 2.0ウィジェットセットを装ったデスクトップウィジェットセットです。それは私が実際にそれをに移植したWebウィジェットセットのようではないデスクトップ- http: //pyjd.org -Webkitを使用(Adobe AIR、Google Chrome、Safariなどの同じエンジン)

これは「hello world」です。

 from pyjamas.ui.RootPanel import RootPanel 
 from pyjamas.ui.Button import Button 
 from pajamas import Window 
 
 def greet(fred) :
 Window.alert( "Hello、AJAX!")
 
 if __ == '__main __':
 b = Button( "Click me"、greet )
 RootPanel()。add(b)

これは、5つの要件のうち最初の4つにすぐに答えます。これにより、要件5が満たされます。

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

それはもっと簡単なことはありません。

3
lkcl

wxLua は、LuaのwxWidgetsライブラリのラッパーです。 Connectメソッドを使用して、GUIウィジェットイベントを関数にアタッチします(関数はJSのようなファーストクラスです)。

2
Nick Van Brunt

GTK-server は非常に使いやすく、BashやVisual Basicを含む30以上の言語から使用できます。

2
Jakob Eriksson

[〜#〜] xul [〜#〜] (非常に使いやすく、強力です-Firefoxの多くはGUI構造にXULを使用して実装されており、+ロジック処理にJavaScriptを使用しています)

XULチュートリアル には、いくつかの良い例があります。 tabboxes の例を示します。ページの下部にあるものには、切り替え可能なタブ、ボタン、編集ボックス、およびグループボックスがあり、かなり単純です(JavaScript/CSS/XBL /キーバインディングなどはありません)。次に、 progressivelymorestuff を後で追加します。これは、指定するファイルの長さに対して多くの機能です。 (少なくとも、問題のロジックを処理するためにJavaScriptを追加し始めるまで)Win32でこのようなことをしなければならなかった場合、それは本当の苦痛でしょう。

2
Jason S

SDL/Swing は非常に簡潔で、読みやすく、邪魔にならず(283k libで依存関係なし)、使いやすいです。例:

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

オープンソースですが、Ikayzo.comからの商用サポートを楽しんでいます。 .NETとiOSの移植が進行中です。

2
Daniel Leuck

今日出会ったのは SDL/Swing です。

1
Digikata