トップレベルのウィンドウの制御

wish を起動したときに表示される GUI ウィンドウは、 トップレベルのウィンドウです。 最初に、このトップレベルのウィンドウの制御について解説します。

トップレベルのウィンドウ

ここまではボタンやラベルの簡単な例を少しだけ見てきましたが、 これらはいずれも「ウィンドウ内に張り付けられる部品」です。 これに対して、wish を起動したときに最初に表示されるウィンドウや、 ここからポップアップしてくるウィンドウは「張り付けられる部品」 とは少々異なります。 例えば、こういった独立したウィンドウはアイコン化することができたり、 Windows ならタスクバーに表示されたりすることから、 いわゆるウィジットとは違うということがわかると思います。

このようなトップレベルウィンドウを制御するコマンドとして wm コマンドがあります。 例えば簡単な例として、 次のプログラムは wish のウィンドウのサイズを変更します。

    1 : #test.tcl
    2 : wm geometry . 400x300

通常、wish84.exe をダブルクリックして起動すると、 ウィンドウのサイズは200ドット×200ドットになっています。 上記のファイルを wish84.exe にドラッグ&ドロップすると、 ウィンドウのサイズが400ドット×300ドットで起動します。

UNIX/X-Window においては、 このような機能はウィンドウマネージャが提供することが多いです。 そのため、コマンド名が wm(Window Manager)になっているのだと思います。 Windows プラットフォームでウィンドウマネージャという用語が 使われるのかどうかを私は知らないのですが、 元々 UNIX 文化から生まれた Tcl/Tk では Windows 上でもコマンド名は wm です。

この他、wm コマンドにはウィンドウのタイトル文字列を 変えたりする機能があります。 下記では、wm コマンドのオプションをいくつか解説します。

wm コマンド

wm コマンドの書式は次の通りです。

コマンド書式 wm option window ?args?
説明 window で示されるトップレベルのウィンドウに対して option が示す設定を行なう。args 以下は大抵設定値を示すが、各 option 毎に異なるので、下記を参照のこと。

上記で「window」はトップレベルウィンドウのウィジットパスを表します。 例えば、wish84.exe を起動したときに現れるルートウィンドウのパスは 「.」です。 ルートウィンドウに限らず、 トップレベルのウィンドウはいつでも作ることができますが、 その方法は トップレベルのウィンドウを作る で解説しています。 ここでは、とりあえずルートウィンドウで挙動を確認してみてください (複数のトップレベルウィンドウに関係するものは、 トップレベルのウィンドウの作成方法がわかってから試してみてください)。

以下では、wm コマンドが本来持っているオプションのうち、 Windows プラットフォームで関係しそうなものだけを示します。

wm geometry window ?newGeometry ?
newGeometry を省略したときは、現在の設定値を返します。 そうでなければ、newGeometry で指定した値を window に対して設定します。 newGeometry の書式は「幅x高さ±x座標±y座標」です。 例えば「500x300+150+200」とすると、 画面左上から右に 150 ピクセル、下に 200 ピクセルの位置を左上とする、 サイズが横 500 ピクセル、高さが 300 ピクセルのウィンドウとなります。 なお、「幅x高さ」の組み合わせか、 または「±x±y」の組み合わせ部分は省略できます。 グリッドモード(後述)が指定されているときは、 幅と高さはそのグリッド単位での指定とみなされます。 そうでなければ単位はピクセルです。 座標はプラス記号(+)で始まっていれば、 画面の左上とウィンドウの左上との間の位置関係を示しますが、 マイナス記号(-)で始まっているときは、 画面の右下とウィンドウの右下との間の位置関係を示すことになります。 newGeometry に空文字列を指定すると、 設定はシステムのデフォルトに戻されます。
wm grid window ?baseWidth baseHeight widthInc heightInc ?
window で示されるトップレベルのウィンドウをグリッドモードにします。 widthInc と heightInc はそれぞれ幅と高さの増分値をピクセル単位で示します。 baseWidth と baseHeight はそれぞれ幅と高さの基本値を グリッド単位で示します。 なお、wm grid コマンドと wm geometry コマンドとを組み合わせて使用した場合、 どうもウィンドウサイズは直感とは異なるサイズになるような気がします。 通常はウィンドウサイズの制御はピクセル単位で行なうのが良いと思われます。
wm aspect window ?minNumer minDenom maxNumer maxDenom ?
ウィンドウの縦横比を決めます。 「幅/高さ」の比率を「minNumer/minDenom」と「maxNumer/maxDenom」 の間に制限します。 minNumer minDenom maxNumer maxDenom のすべてに空文字列を指定すると制限を取り除きます。 minNumer 以下を省略したときは、現在の設定を返します。 ...とマニュアルにあるのですが、 本コマンドを実行したからといって、 マウスでウィンドウをリサイズするときに 操作制限がかかるわけでは無いようです。
wm maxsize window ?width height ?
ウィンドウの最大サイズを指定します。 グリッドモードが指定されているときは、 幅と高さはそのグリッド単位での指定とみなされます。 そうでなければ単位はピクセルです。 width と height を省略すると現在の設定値をリストで返します。
wm minsize window ?width height ?
ウィンドウの最小サイズを指定します。 グリッドモードが指定されているときは、 幅と高さはそのグリッド単位での指定とみなされます。 そうでなければ単位はピクセルです。 width と height を省略すると現在の設定値をリストで返します。 私の環境(WindowsXP)の場合、 width は 115 以下の値を設定できませんでした (最低限、 右上の×ボタンやアイコン化ボタンなどを 表示する領域を確保しているためだと思われます。)。
wm resizable window ?width height ?
ウィンドウのサイズ変更可能/不可能、を変更します。 width と height はブーリアン値でそれぞれ横方向、縦方向を表し、 1 ならばサイズ変更可能、0 ならば不可能を指定することになります。 width と height が省略されたときは、現在の設定をリストで返します。
wm attributes window
wm attributes window ?option ?
wm attributes window ?option value option value ...?
ウィンドウの属性を設定するか、または返します。 最初の形式では、すべての属性の値をリストで返します。 2つ目の形式では、指定したオプションに対する値のみを返します。 3つ目の形式では、各オプションの値を設定します。 オプションに指定できるのは次の通りです。 「-disabled 値」では、値に 0 を指定すると通常のウィンドウ、 値に 1 を指定するとディスエイブル状態、 つまり選択不可のウィンドウとなります。 「-toolwindow 値」では、値に 0 を指定すると通常のウィンドウ、 値に 1 を指定するとツールウィンドウとなり、 ウィンドウ右上のアイコン化と最大化のボタンが無くなります。 そして、同時にタスクバーからも消えます。 「-topmost 値」では、値に 0 を指定すると通常のウィンドウ、 値に 1 を指定すると常に上に表示されるウィンドウとなります。 「-alpha 値」では、透過レベルを指定します。 値には 0 〜 1 の間の実数値を指定します。 1 だと未透過(つまり、普通のウィンドウ)、0 だと完全に透明になります。 0 より大きく、1 未満の値だと半透明になります。 このオプションは Windows 2000/XP でのみ有効です。
wm iconify window
ウィンドウをアイコン化します。 Windows プラットフォームの場合は、 タスクバーにのみ表示される状態となります。
wm deiconify window
アイコン化されたウィンドウを元に戻します。 Windows プラットフォームの場合は、 元に戻すとウィンドウは前面に現れ、 かつフォーカスが当たります(アクティブなウィンドウになります)。
wm title window ?string1 ?
string1 で示される文字列をウィンドウのタイトルにします。 string1 を省略したときは、現在のタイトル文字列を返します。
wm iconbitmap window ?bitmap ?
アイコン画像を指定します。 bitmap は Tk 標準形式のビットマップを受け付けます。 Windows プラットフォームの場合は「wm iconbitmap ?-default? ?image?」 という書式を受け付けます。 この場合、-default オプションを指定すると、 すべてのトップレベルウィンドウに対してアイコンが指定されます。 また image には Windows のアイコンファイル (拡張子が .ico または .icr のファイル) のフルパス名を指定することができます。
wm overrideredirect window ?boolean ?
boolean を 1 にすると、 指定されたウィンドウはウィンドウマネージャの管理外となります。 管理外となると、位置の制御ができなくなり、 タイトル部分やフレームも付かなくなります。 boolean を省略すると現在の設定値が返ります。
wm state window ?newState ?
ウィンドウの状態を newState に設定します。 newState を省略したときは現在の状態を返します。 状態を表す表現には、normal、iconic、withdrawn、icon、zoomed があります。 例えばルートウィンドウがアイコン化されているときに 「wm state .」とすると iconic が返ります。 逆に「wm state . iconic」とすればアイコン化されます (wm iconify と同じ)。
wm transient window ?master ?
ウィンドウを master で指定したウィンドウの 従属ウィンドウであることを示します。 この指定をすると、 Windows 上では window で示したウィンドウはタスクバーに表示されず、 ウィンドウ右上のアイコン化ボタンなども表示されなくなります。 また、master 側がアイコン化されると画面から消えます。 設定を解除するには master に空文字列を指定します。 master を省略したときは現在の設定値を返します。
wm withdraw window
ウィンドウを画面から消します。 元に戻したいときは「wm deiconify」を使います。
wm protocol window ?name? ?command?
ウィンドウマネージャのプロトコルに利用されます。 例えば name の部分に WM_DELETE_WINDOW を指定すれば、 ウィンドウを閉じようとしたときの挙動を command で指定することができるようになります。 これを「ハンドラ(handler)」と言います。 command を省略したときは、 name に対して指定されているコマンド(つまりハンドラ)が返ります。 ハンドラが無ければ空文字列が返ります。 command に空文字列を指定すれば、ハンドラを削除することができます。 namecommand の両方が省略された場合は、 現在のハンドラのリストが返ります。

Tcl/TkでWindowsプログラミング目次へ ↑