第 1 章 メインウィンドウ

◀ 1.10 スクリーン表示位置とサイズ (1)   【目  次】  1.12 スクリーン中央への配置(1) ▶

999999

 更新日:


 このホームページは Amazon Kindle 本の作成中の草稿です。日々、原稿を見直しているので、内容が変わることに留意して読んで下さい。本が出版され次第、このホームページは削除されます。

1.11 スクリーン表示位置とサイズ(2)(winfo_x、winfo_y、winfo_rootx、winfo_rooty、winfo_width、winfo_height、winfo_reqwidth、winfo_reqheight)

 メインウィンドウの表示位置は Misc クラスメソッド の「winfo_x」、「winfo_y」、「winfo_rootx」、「winfo_rooty」メソッドで取得することができます。

 「winfo_x」および「winfo_y」メソッドは、親オブジェクトに対する表示位置を取得します。取得するには下記の書式を用います。詳細は Misc クラスメソッド を参照して下さい。

object.winfo_x()
object.winfo_y()

 メインウィンドウの場合、親オブジェクトはスクリーンになります。このメソッドで取得される値はウィンドウの左上端の表示設定値で、「winfo_x」は x 座標、「winfo_y」は y 座標を取得します。タイトルバーを持つウィンドウの場合、x 座標の表示位置は設定値より「8」ピクセル右にずれて表示されます。

 「winfo_rootx」および「winfo_rooty」はスクリーンに対する表示位置を取得します。取得するには下記の書式を用います。詳細は Misc クラスメソッド を参照して下さい。

object.winfo_rootx()
object.winfo_rooty()

このメソッドで取得される値はウィンドウクライアント領域の左上端の表示値で、「winfo_rootx」は x 座標、「winfo_rooty」は y 座標を取得します。タイトルバーを持つウィンドウの場合、ウィンドウは設定値より「8」ピクセル右に、クライアント領域はタイトルバーの下に「31」ピクセルずれて表示されるので、取得される値は設定値より x 座標は「8」ピクセル、 y 座標は「31」ピクセル多い値になります。

 メインウィンドウのサイズは Misc クラスメソッド の「winfo_width」、「winfo_height」、「winfo_reqwidth」、「winfo_reqheight」メソッドで取得することができます。

 「winfo_width」および「winfo_height」メソッドは、現在表示されているオブジェクトの幅と高さを取得します。。取得するには下記の書式を用います。詳細は Misc クラスメソッド を参照して下さい。

object.winfo_width()
object.winfo_height()

 「winfo_reqwidth」、「winfo_reqheight」メソッドは、それぞれ、オブジェクトの「width」、「height」オプションで設定されている幅と高さを取得します。取得するには下記の書式を用います。詳細は Misc クラスメソッド を参照して下さい。

object.winfo_reqwidth()
object.winfo_reqheight()

Wm クラスメソッド の「wm_geometry」または「geometry」メソッドでサイズを設定している場合、このメソッドでは表示されているウィンドウのサイズを取得することができません。

 次のプログラムは「width」と「height」オプションでウィンドウサイズを指定した後、「wm_geometry」メソッドでウィンドウの表示位置とサイズを設定しています。ウィンドウの表示位置とサイズを各メソッドで取得して「print」出力しています。値の取得には、設定値がウィンドウに反映された後に実行する必要があります。そのため、ウインドウへの反映が処理されるまで待機する「update」メソッドを「「print」出力の前に実行しています。「update」メソッドは Misc クラスメソッドを参照して下さい。

1
import tkinter as tk
2
root = tk.Tk()
3
root['width']=456
4
root['height']=123
5
root.wm_geometry('300x200+150+100')
6
root.update()
7
print('position',root.winfo_x(), root.winfo_y())
8
print('position_r',root.winfo_rootx(), root.winfo_rooty())
9
print('size',root.winfo_width(),root.winfo_height())
10
print('size_rq',root.winfo_reqwidth(), root.winfo_reqheight())
11
root.mainloop()

「print」出力が各メソッドに対して下記のように得られます。

position 150 100
position_r 158 131
size 300 200
size_rq 456 123