このホームページは 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 を考慮して補正します。
import tkinter as tk | |
root = tk.Tk() | |
root.wm_geometry('300x200') | |
root.update() | |
ww, wh = root.winfo_width(), root.winfo_height() | |
wx0 = root.winfo_rootx() - root.winfo_x() | |
th = root.winfo_rooty() - root.winfo_y() | |
wh = wh + th | |
sw = root.winfo_screenwidth() | |
sh = root.winfo_screenheight() | |
root.wm_geometry('+'+str((int((sw-ww)/2))-wx0)+ | |
'+'+str(int((sh-wh)/2))) | |
root.mainloop() |