ウィジェットツールキット、ウィジェットライブラリ、GUIツールキット、GUIフレームワーク、UIフレームワーク、またはUXライブラリとは、プログラムのグラフィカルユーザーインターフェース(GUI)を構築するために使用される、一連のグラフィカル制御要素(ウィジェットと呼ばれる)を含むライブラリ、またはライブラリの集合のことです。
ほとんどのウィジェットツールキットには、独自のレンダリングエンジンも含まれています。このエンジンは、特定のオペレーティングシステムやウィンドウシステムに特化したものもあれば、複数のシステムやOpenGL、OpenVG、EGLなどのレンダリングAPIと連携するためのバックエンドを備えているものもあります。グラフィカルコントロール要素の外観は、ハードコーディングすることも、テーマやスキンを適用できるように分離することも可能です。

一部のツールキットは、言語バインディングを使用することで他の言語から使用できます。Glade Interface Designerなどのグラフィカルユーザーインターフェースビルダーは、この場合GtkBuilderなどのユーザーインターフェースマークアップ言語を使用して、WYSIWYG方式でGUIを作成することを容易にします。
プログラムのGUIは一般的にカスケード方式で構築され、グラフィカルな制御要素が互いに直接重ねて追加されていく。
ほとんどのウィジェットツールキットは、インタラクションのモデルとしてイベント駆動型プログラミングを使用しています。 [ 1 ]ツールキットは、ユーザーがボタンをクリックしたときなどのユーザーイベントを処理します。イベントが検出されると、アプリケーションに渡され、そこで処理されます。これらのツールキットの設計は、イベントアクションの過度に単純化されたモデルを促進し、プログラマーがエラーが発生しやすく、拡張が難しく、過度に複雑なアプリケーションコードを作成する原因となっているとして批判されています。[ 2 ]有限状態機械と階層型状態機械は、リアクティブプログラムの対話的な状態変化を表す高レベルモデルとして提案されています。
ウィンドウはグラフィカルな制御要素とみなされます。一部のウィンドウシステムでは、ウィンドウはウィンドウマネージャによってシーングラフ(キャンバス)に直接追加され、さまざまな方法で重ね合わせたり、レイヤー化したりできます。各ウィンドウは特定のアプリケーションに関連付けられており、そのアプリケーションがキャンバスに追加されたウィジェットを制御します。これらのウィジェットは、関連付けられたアプリケーションによって監視および変更できます。