[ruby-list:41748] Re: Ruby/Tk でルートウィンドウを最大化する方法?

From: Hidetoshi NAGAI <nagai@...>
Date: 2005-12-31 13:19:27 UTC
List: ruby-list #41748
永井@知能.九工大です.

From: Nobuhide Kanagawa <cxj15527@gmail.com>
Subject: [ruby-list:41739] Ruby/Tk でルートウィンドウを最大化する方法?
Date: Sat, 31 Dec 2005 10:23:13 +0900
Message-ID: <20051231102258.9ef14eb8.cxj15527@gmail.com>
> 現状、Ruby/Tk でルートウィンドウのサイズを変更する場合、
> 以下のようにサイズを直接指定しています。
    (snip)
> サイズを直接指定しないで、
> ルートウィンドウをいわゆる[最大化]する方法はありますでしょうか?

ウィンドウマネージャからの正確な情報を得る一般的な方法がない以上,
残念ながら「完璧な最大化」の方法はないと思います.

「最大化」にも「ウィンドウマネージャによるフレーム付き」と
「フレームなしでの画面全体」との2種類があるかと思いますが,
前者ならフレームの幅に関するパラメータを別途手で与えねばなりませんし,
後者ならアプリケーションを確実に終了できるようにしておく必要があります.

いずれの方法を使うにしても画面サイズは必要ですが,それには

   Tk.root.winfo_screenwidth
   Tk.root.winfo_screenheight

または

   Tk.root.winfo_vrootwidth
   Tk.root.winfo_vrootheight

を使うことになるはずです.
後は,この値に基づいて作成した文字列を使って

   Tk.root.geometry

を呼ぶしかないと思います.

フレーム等の情報を手で与えた場合の計算は問題ないと思いますので,
念のため,フレームなしの場合についてだけ触れておきます.

フレームなしにするためには,ウィンドウをウィンドウマネージャの
管理外にする必要がありますので,

   Tk.root.overrideredirect(true)

を呼ばねばなりません.

ただし,すでに表示されているウィンドウに対してこれを実行しても
全く変化はありません.
影響が適用されるのはウィンドウが表示されるときです.

したがって,すでに表示されている場合には,
一旦消してから再表示するという作業も必要です.
例えば,

   Tk.root.withdraw
   Tk.root.deiconify

ということになります.
一気にやれば

   Tk.root.overrideredirect(true).withdraw.deiconify

ですね.(^_^)
逆にウィンドウマネージャの管理下に戻すなら

   Tk.root.overrideredirect(false).withdraw.deiconify

となります.

なお,最大化から戻す際には

   Tk.root.winfo_reqwidth
   Tk.root.winfo_reqheight

の情報も必要かもしれませんね.


# というわけで,私の 2005 年の最後のメッセージは終りです.(^_^)
# 皆様,良いお年をお迎え下さい.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread