第 1 章 メインウィンドウ

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

999999

 更新日:


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

1.12 スクリーン中央への配置(1)(winfo_screenwidth、winfo_screenheight)

 tkinter にはメインウィンドウをスクリーンの中央に配置するメソッドはありません。アプリケーションでスクリーンサイズと、表示するウィンドウのサイズから計算して設定します。スクリーンサイズは Wm クラスメソッド の「winfo_screenwidth」メソッドで幅を、「winfo_screenheight」メソッドで高さをピクセル単位で取得します。

object.winfo_screenwidth()
object.winfo_screenheight()

 メインウィンドウのサイズは 1.11 スクリーン表示位置とサイズ(2)で取得できます。このとき、タイトルバーのあるウィンドウの場合、取得値が実際の表示と異なることに注意して補正します。

 次のプログラムはタイトルバーを含むメインウィンドウをスクリーンの中央に配置しています。x 座標のオフセットを wx0、タイトルバーの高さを th として求めています。これらは、タイトルバーのないウィンドウではともに 0 になります。ウィンドウの高さはクライアント領域の高さに th を加算して求めています。x 座標はオフセット wx0 を考慮して補正します。

1
import tkinter as tk
2
root = tk.Tk()
3
root.wm_geometry('300x200')
4
root.update()
5
ww, wh = root.winfo_width(), root.winfo_height()
6
wx0 = root.winfo_rootx() - root.winfo_x()
7
th = root.winfo_rooty() - root.winfo_y()
8
wh = wh + th
9
sw = root.winfo_screenwidth()
10
sh = root.winfo_screenheight()
11
root.wm_geometry('+'+str((int((sw-ww)/2))-wx0)+
12
        '+'+str(int((sh-wh)/2)))
13
root.mainloop()