60

GUI アプリをすばやく作成できる GUI プログラミング ライブラリ、ツールキット、フレームワークを挙げてください。そういう意味では、

  • GUI は、人間が読める (および人間が書き込める) プレーン テキスト ファイル (コード) で完全に記述されています。
  • コードは簡潔で (ウィジェット/イベントのペアごとに 1 行または 2 行のコード)、スクリプト作成に適しています
  • GUI の構造と操作はコードから明らかです (ウィジェットのネストとイベントの流れ)
  • GUI の構築方法に関する詳細は隠されています (メインループ、イベント リスナーのアタッチなど)。
  • 自動レイアウトがサポートされています (vbox、hbox など)。

回答が示唆するように、これは宣言型GUI プログラミングとして定義される場合がありますが、必ずしもそうであるとは限りません。機能し、使いやすく、簡潔であれば、どのようなアプローチでも問題ありません。

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

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

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

ファジェット

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

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

ファジェットの例のスクリーンショット
(ソース: 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> 

ルネッサンスの例のスクリーンショット
(ソース: 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 )

Pythonカード

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 . クロスプラットフォーム (独自のウィジェット セット)。成熟した (おそらく時代遅れでさえある) アクティブな. 例:

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

ツリーソン

Python のツリーソン。GUI を YAML ファイル ( YAML ツリー内の Python ) で記述します。プラットフォーム: 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

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

  <?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 の例
(ソース: picamatic.com )


貢献していただきありがとうございます!

4

10 に答える 10

16

冗談ではなく、HTML です。

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

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

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

すべての目的に適しているわけではありませんが、多くの人にとっては十分です。提供しなければならない理由もありません - 必要に応じて HTML ファイルをクライアントに配布することもできます - TiddlyWikiを参照してください。

于 2009-01-22T20:34:32.980 に答える
7

あなたが説明しているのは、靴を除いて、宣言型プログラミングの新しい概念です。私は靴を GUIドメイン固有言語として説明したいと思います。Visual Basic フォームは、IDE デザイナの裏側を見れば、宣言型でした。さらにさかのぼると、Oracle の SQL*Forms がありましたが、テキスト エディタでそれらを組み立てるのは、非常に勇敢な人だけが行うプロセスでした。

リストに別のものを追加するために、Microsoft にはXAMLがあり、とりわけWPF用に構築された GUI について説明しています。

言及されたスキームのいくつかは非常に単純ですが、宣言的に定義された GUI はコードで定義されたものと同じくらい複雑になる可能性がありますが、それらはより簡単で簡潔です。それらは、「何を」したいのかを言い、それを処理するために下層のフレームワークに任せます。 「どのように」。

于 2009-01-22T21:10:37.370 に答える
2

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

于 2009-01-26T17:14:14.183 に答える
2

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

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

オープン ソースですが、Ikayzo.com から商用サポートを受けています。.NET および iOS への移植が進行中です。

于 2010-06-08T13:37:44.147 に答える
2

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

于 2009-03-17T14:42:45.370 に答える
2

XUL (it's pretty easy to use, and powerful -- much of Firefox is implemented using XUL for GUI structure, + javascript for logic handling)

The XUL tutorial has some good examples. Here's one for tabboxes. The one at the bottom of the page has switchable tabs, buttons, edit boxes, and group boxes, and it's fairly simple (no Javascript/CSS/XBL/key bindings/etc). They then add progressively more stuff later which is a lot of functionality for the length of the file that specifies it. (at least until you start adding javascript to handle the logic in question) If I had to do something like this in Win32 it would be a real pain.

于 2009-01-22T20:56:33.777 に答える
1

今日はSDL/Swingに出くわしました。

于 2010-05-26T04:25:24.257 に答える
-2

.NET プラットフォームを使用している場合は、XAML を確認する必要があります。

于 2009-01-26T19:27:50.590 に答える