# 24.3. `Tix` --- Tkの拡張ウィジェット

`Tix` (Tk Interface Extension) モジュールは豊富な追加ウィジェットを提供します。標準 Tk ライブラリには多くの有用なウィジェットがありますが、完全では決してありません。 `Tix` ライブラリは標準 Tk に欠けている一般的に必要とされるウィジェットの大部分を提供します: `HList` 、 `ComboBox` 、 `Control` (別名SpinBox) および各種のスクロール可能なウィジェット。 `Tix` には、一般的に幅広い用途に役に立つたくさんのウィジェットも含まれています: `NoteBook` 、 `FileEntry` 、 `PanedWindow` など。それらは40以上あります。

これら全ての新しいウィジェットと使うと、より便利でより直感的なユーザインタフェース作成し、あなたは新しい相互作用テクニックをアプリケーションに導入することができます。アプリケーションとユーザに特有の要求に合うように、大部分のアプリケーションウィジェットを選ぶことによって、アプリケーションを設計できます。

注釈

`Tix` モジュールは、Python 3 では `tkinter.tix` にリネームされました。 2to3 ツールが自動的にソースコードの import を修正します。

参考

Tix Homepage
  `Tix` のホームページ。ここには追加ドキュメントとダウンロードへのリンクがあります。
Tix Man Pages
  manページと参考資料のオンライン版。
Tix Programming Guide
  プログラマ用参考資料のオンライン版。
Tix Development Applications
  Tix と Tkinter プログラムの開発のための Tix アプリケーション。 Tideアプリケーションは Tk または Tkinter に基づいて動作します。また、リモートで Tix/Tk/Tkinter アプリケーションを変更やデバグするためのインスペクタ TixInspect が含まれます。

## 24.3.1. Tixを使う

class `Tix.``Tix`(screenName[, baseName[, className]])

  たいていはアプリケーションのメインウィンドウを表すTixのトップレベルウィジェット。それには Tcl インタープリタが付随します。

  `Tix` モジュールのクラスは `Tkinter` モジュールのクラスをサブクラス化します。前者は後者をインポートします。だから、Tkinter と一緒に `Tix` を使うためにやらなければならないのは、モジュールを一つインポートすることだけです。一般的に、 `Tix` をインポートし、トップレベルでの `Tkinter.Tk` の呼び出しを `Tix.Tk` に置き換えるだけでよいのです:

      import Tix
      from Tkconstants import *
      root = Tix.Tk()

`Tix` を使うためには、通常 Tk ウィジェットのインストールと平行して、 `Tix` ウィジェットをインストールしなければなりません。インストールをテストするために、次のことを試してください:

    import Tix
    root = Tix.Tk()
    root.tk.eval('package require Tix')

これが失敗した場合は、先に進む前に解決しなければならない問題が Tk のインストールにあることになります。インストールされた `Tix` ライブラリを指定するためには環境変数 `TIX_LIBRARY` を使ってください。 Tk 動的オブジェクトライブラリ (`tk8183.dll` または `libtk8183.so`) を含むディレクトリと同じディレクトリに、動的オブジェクトライブラリ (`tix8183.dll` または `libtix8183.so`)があるかどうかを確かめてください。動的オブジェクトライブラリのあるディレクトリには、 `pkgIndex.tcl` (大文字、小文字を区別します) という名前のファイルも含まれているべきで、それには次の一行が含まれます:

    package ifneeded Tix 8.1 [list load "[file join $dir tix8183.dll]" Tix]

## 24.3.2. Tixウィジェット

Tix は40個以上のウィジェットクラスを `Tkinter` のレパートリーに導入します。標準配布の `Demo/tix` ディレクトリには、 `Tix` ウィジェットのデモがあります。

### 24.3.2.1. 基本ウィジェット

class `Tix.``Balloon`

  ヘルプを提示するためにウィジェット上にポップアップする Balloon。ユーザがカーソルをBalloonウィジェットが束縛されているウィジェット内部へ移動させたとき、説明のメッセージが付いた小さなポップアップウィンドウがスクリーン上に表示されます。

class `Tix.``ButtonBox`

  ButtonBox ウィジェットは、`Ok Cancel` のためだけに普通は使われるようなボタンボックスを作成します。

class `Tix.``ComboBox`

  ComboBox ウィジェットはMS Windowsのコンボボックスコントロールに似ています。ユーザはエントリ・サブウィジェットでタイプするか、リストボックス・サブウィジェットから選択するかのどちらかで選択肢を選びます。

class `Tix.``Control`

  Control ウィジェットは `SpinBox` ウィジェットとしても知られています。ユーザは二つの矢印ボタンを押すか、またはエントリに直接値を入力して値を調整します。新しい値をユーザが定義した上限と下限に対してチェックします。

class `Tix.``LabelEntry`

  LabelEntry ウィジェットはエントリウィジェットとラベルを一つのメガウィジェットにまとめたものです。"記入形式"型のインタフェースの作成を簡単に行うために使うことができます。

class `Tix.``LabelFrame`

  LabelFrame ウィジェットはフレームウィジェットとラベルを一つのメガウィジェットにまとめたものです。LabelFrameウィジェット内部にウィジェットを作成するためには、 `frame` サブウィジェットに対して新しいウィジェットを作成し、それらを `frame` サブウィジェット内部で取り扱います。

class `Tix.``Meter`

  Meter ウィジェットは実行に時間のかかるバックグラウンド・ジョブの進み具合を表示するために使用できます。

class `Tix.``OptionMenu`

  OptionMenu はオプションのメニューボタンを作成します。

class `Tix.``PopupMenu`

  PopupMenu ウィジェットは `tk_popup` コマンドの代替品として使用できます。 `Tix` `PopupMenu` ウィジェットの利点は、操作するためにより少ないアプリケーション・コードしか必要としないことです。

class `Tix.``Select`

  Select ウィジェットはボタン・サブウィジェットのコンテナです。ユーザに対する選択オプションのラジオボックスまたはチェックボックス形式を提供するために利用することができます。

class `Tix.``StdButtonBox`

  StdButtonBox ウィジェットは、Motif に似たダイアログボックスのための標準的なボタンのグループです。

### 24.3.2.2. ファイルセレクタ

class `Tix.``DirList`

  DirList ウィジェットは、ディレクトリのリストビュー(その前のディレクトリとサブディレクトリ)を表示します。ユーザはリスト内の表示されたディレクトリの一つを選択したり、あるいは他のディレクトリへ変更したりできます。

class `Tix.``DirTree`

  DirTree ウィジェットはディレクトリのツリービュー(その前のディレクトリとそのサブディレクトリ)を表示します。ユーザはリスト内に表示されたディレクトリの一つを選択したり、あるいは他のディレクトリに変更したりできます。

class `Tix.``DirSelectDialog`

  DirSelectDialog ウィジェットは、ダイアログウィンドウにファイルシステム内のディレクトリを提示します。望みのディレクトリを選択するために、ユーザはファイルシステムを介して操作するこのダイアログウィンドウを利用できます。

class `Tix.``DirSelectBox`

  `DirSelectBox` は標準 Motif(TM) ディレクトリ選択ボックスに似ています。ユーザがディレクトリを選択するために一般的に使われます。DirSelectBox は主に最近 ComboBox ウィジェットに選択されたディレクトリを保存し、すばやく再選択できるようにします。

class `Tix.``ExFileSelectBox`

  ExFileSelectBox ウィジェットは、たいてい tixExFileSelectDialog ウィジェット内に組み込まれます。ユーザがファイルを選択するのに便利なメソッドを提供します。 `ExFileSelectBox` ウィジェットのスタイルは、MS Windows 3.1 の標準ファイルダイアログにとてもよく似ています。

class `Tix.``FileSelectBox`

  FileSelectBox は標準的な Motif(TM) ファイル選択ボックスに似ています。ユーザがファイルを選択するために一般的に使われます。FileSelectBox は主に最近 `ComboBox` ウィジェットに選択されたファイルを保存し、素早く再選択できるようにします。

class `Tix.``FileEntry`

  FileEntry ウィジェットはファイル名を入力するために使うことができます。ユーザは手でファイル名をタイプできます。その代わりに、ユーザはエントリの横に並んでいるボタンウィジェットを押すことができます。それはファイル選択ダイアログを表示します。

### 24.3.2.3. ハイアラキカルリストボックス

class `Tix.``HList`

  HList ウィジェットは階層構造をもつどんなデータ(例えば、ファイルシステムディレクトリツリー)でも表示するために使用できます。リストエントリは字下げされ、階層のそれぞれの場所に応じて分岐線で接続されます。

class `Tix.``CheckList`

  CheckList ウィジェットは、ユーザが選ぶ項目のリストを表示します。CheckList は Tk のチェックリストやラジオボタンより多くの項目を扱うことができることを除いて、チェックボタンあるいはラジオボタンウィジェットと同じように動作します。

class `Tix.``Tree`

  Tree ウィジェットは階層的なデータをツリー形式で表示するために使うことができます。ユーザはツリーの一部を開いたり閉じたりすることによって、ツリーの見えを調整できます。

### 24.3.2.4. タビュラーリストボックス

class `Tix.``TList`

  TList ウィジェットは、表形式でデータを表示するために使うことができます。 `TList` ウィジェットのリスト・エントリは、Tkのリストボックス・ウィジェットのエントリに似ています。主な差は、(1) `TList` ウィジェットはリスト・エントリを二次元形式で表示でき、(2) リスト・エントリに対して複数の色やフォントだけでなく画像も使うことができるということです。

### 24.3.2.5. 管理ウィジェット

class `Tix.``PanedWindow`

  PanedWindow ウィジェットは、ユーザがいくつかのペインのサイズを対話的に操作できるようにします。ペインは垂直または水平のどちらかに配置されます。ユーザは二つのペインの間でリサイズ・ハンドルをドラッグしてペインの大きさを変更します。

class `Tix.``ListNoteBook`

  ListNoteBook ウィジェットは、 `TixNoteBook` ウィジェットにとてもよく似ています。ノートのメタファを使って限られた空間をに多くのウィンドウを表示するために使われます。ノートはたくさんのページ(ウィンドウ)に分けられています。ある時には、これらのページの一つしか表示できません。ユーザは `hlist` サブウィジェットの中の望みのページの名前を選択することによって、これらのページを切り替えることができます。

class `Tix.``NoteBook`

  NoteBook ウィジェットは、ノートのメタファを多くのウィンドウを表示することができます。ノートはたくさんのページに分けられています。ある時には、これらのページの一つしか表示できません。ユーザは NoteBook ウィジェットの一番上にある目に見える"タブ"を選択することで、これらのページを切り替えることができます。

### 24.3.2.6. 画像タイプ

`Tix` モジュールは次のものを追加します:

- 全ての `Tix` と `Tkinter` ウィジェットに対して XPM ファイルからカラー画像を作成する pixmap 機能。
- Compound 画像タイプは複数の水平方向の線から構成される画像を作成するために使うことができます。それぞれの線は左から右に並べられた一連のアイテム(テキスト、ビットマップ、画像あるいは空白)から作られます。例えば、Tk の`Button` ウィジェットの中にビットマップとテキスト文字列を同時に表示するためにcompound画像は使われます。

### 24.3.2.7. その他のウィジェット

class `Tix.``InputOnly`

  InputOnly ウィジェットは、ユーザから入力を受け付けます。それは、`bind` コマンドを使って行われます(Unixのみ)。

### 24.3.2.8. ジオメトリマネジャを作る

加えて、 `Tix` は次のものを提供することで `Tkinter` を補強します:

class `Tix.``Form`

  Tkウィジェットに対する接続ルールに基づいたジオメトリマネジャを 作成(Form)します。

## 24.3.3. Tixコマンド

class `Tix.``tixCommand`

  tixコマンド は `Tix` の内部状態と `Tix` アプリケーション・コンテキストのいろいろな要素へのアクセスを提供します。これらのメソッドによって操作される情報の大部分は、特定のウィンドウというよりむしろアプリケーション全体かスクリーンあるいはディスプレイに関するものです。

  現在の設定を見るための一般的な方法は:

      import Tix
      root = Tix.Tk()
      print root.tix_configure()

`tixCommand.``tix_configure`(cnf=None **kw)

  Tix アプリケーション・コンテキストの設定オプションを問い合わせたり、変更したりします。オプションが指定されなければ、利用可能なオプションすべてのディクショナリを返します。オプションが値なしで指定された場合は、メソッドは指定されたオプションを説明するリストを返します(このリストはオプションが指定されていない場合に返される値に含まれている、指定されたオプションに対応するサブリストと同一です)。一つ以上のオプション-値のペアが指定された場合は、メソッドは与えられたオプションが与えられた値を持つように変更します。この場合は、メソッドは空文字列を返します。オプションは設定オプションのどれでも構いません。

`tixCommand.``tix_cget`(option)

  option によって与えられた設定オプションの現在の値を返します。オプションは設定オプションのどれでも構いません。

`tixCommand.``tix_getbitmap`(name)

  ビットマップディレクトリの一つの中の `name.xpm` または `name` と言う名前のビットマップファイルの場所を見つけ出します (`tix_addbitmapdir()` メソッドを参照してください)。 `tix_getbitmap()` を使うことで、アプリケーションにビットマップファイルのパス名をハードコーディングすることを避けることができます。成功すれば、文字 `@` を先頭に付けたビットマップファイルの完全なパス名を返します。戻り値をTkとTixウィジェットの `bitmap` オプションを設定するために使うことができます。

`tixCommand.``tix_addbitmapdir`(directory)

  Tix は `tix_getimage()` と `tix_getbitmap()` メソッドが画像ファイルを検索するディレクトリのリストを保持しています。標準ビットマップディレクトリは `$TIX_LIBRARY/bitmaps` です。 `tix_addbitmapdir()` メソッドは directory をこのリストに追加します。そのメソッドを使うことによって、アプリケーションの画像ファイルを `tix_getimage()` または `tix_getbitmap()` メソッドを使って見つけることができます。

`tixCommand.``tix_filedialog`([dlgclass])

  このアプリケーションからの異なる呼び出しの間で共有される可能性があるファイル選択ダイアログを返します。最初に呼ばれた時に、このメソッドはファイル選択ダイアログ・ウィジェットを作成します。このダイアログはその後のすべての `tix_filedialog()` への呼び出しで返されます。オプションの dlgclass パラメータは、要求されているファイル選択ダイアログ・ウィジェットの型を指定するために文字列として渡されます。指定可能なオプションは `tix` 、 `FileSelectDialog` あるいは `tixExFileSelectDialog` です。

`tixCommand.``tix_getimage`(self, name)

  ビットマップディレクトリの一つの中の `name.xpm` 、 `name.xbm` または `name.ppm` という名前の画像ファイルの場所を見つけ出します(上の `tix_addbitmapdir()` メソッドを参照してください)。同じ名前(だが異なる拡張子)のファイルが一つ以上ある場合は、画像のタイプがXディスプレイの深さに応じて選択されます。xbm画像はモノクロディスプレイの場合に選択され、カラー画像はカラーディスプレイの場合に選択されます。 `tix_getimage()` を使うことによって、アプリケーションに画像ファイルのパス名をハードコーディングすることを避けられます。成功すれば、このメソッドは新たに作成した画像の名前を返し、Tk と Tix ウィジェットの `image` オプションを設定するためにそれを使うことができます。

`tixCommand.``tix_option_get`(name)

  Tixのスキーム・メカニズムによって保持されているオプションを得ます。

`tixCommand.``tix_resetoptions`(newScheme, newFontSet[, newScmPrio])

  Tix アプリケーションのスキームとフォントセットを newScheme と newFontSet それぞれへと再設定します。これはこの呼び出し後に作成されたそれらのウィジェットだけに影響します。そのため、Tix アプリケーションのどんなウィジェットを作成する前に resetoptions メソッドを呼び出すのが最も良いのです。

  オプション・パラメータ newScmPrio を、Tix スキームによって設定される Tk オプションの優先度レベルを再設定するために与えることができます。

  Tk が X オプションデータベースを扱う方法のため、Tix がインポートされ初期化された後に、カラースキームとフォントセットを `tix_config()` メソッドを使って再設定することができません。その代わりに、 `tix_resetoptions()` メソッドを使わなければならないのです。