このホームページは Amazon Kindle 本の作成中の草稿です。日々、原稿を見直しているので、内容が変わることに留意して読んで下さい。本が出版され次第、このホームページは削除されます。
2.12 スクリーン中央への配置(1)(winfo_screenwidth、winfo_screenheight)
サブウィンドウをスクリーンの中央に配置するメソッドはありません。メインウィンドウと同様にアプリケーションで設定します。1.12 スクリーン中央への配置(1)を参照して下さい。
次のプログラムはタイトルバーを含むサブウィンドウをスクリーンの中央に配置しています。x 座標のオフセットを wx0、タイトルバーの高さを th として求めています。これらは、タイトルバーのないウィンドウではともに 0 になります。ウィンドウの高さはクライアント領域の高さに th を加算して求めています。x 座標はオフセット wx0 を考慮して補正します。
import tkinter as tk | |
root = tk.Tk() | |
root.wm_geometry('300x200') | |
sub = tk.Toplevel(root, width=300, height=200, bg='red') | |
root.update() | |
ww, wh = sub.winfo_width(), sub.winfo_height() | |
wx0 = sub.winfo_rootx() - sub.winfo_x() | |
th = sub.winfo_rooty() - sub.winfo_y() | |
wh = wh + th | |
sw = sub.winfo_screenwidth() | |
sh = sub.winfo_screenheight() | |
sub.wm_geometry('+'+str((int((sw-ww)/2))-wx0)+ | |
'+'+str(int((sh-wh)/2))) | |
root.wm_deiconify() | |
sub.wm_deiconify() | |
root.mainloop() |