tkinterのメイン画面の位置やサイズの情報は、トップレベルウィジェットのgeometryメソッドを用いて取得・調整することができます。
メイン画面の位置・サイズを調整する方法について、実際にコードを作成しながらまとめました。
【スポンサーリンク】
メイン画面のサイズ・位置情報の取得
動作内容
ボタンをクリックすると、現在のメイン画面のサイズと位置を取得し、表示するアプリを作成してみます。
最初に、完成した画面を示します。

tkinterのメイン画面に、ボタンが一つだけ表示されています。
ボタンをクリックすると、現在のメイン画面サイズと位置を取得し、ボタンのタイトルに表示します。

最初の二組が画面サイズ、後ろの二組が座標を意味しています。
画面サイズや位置を変えてクリックすると、その時のサイズ・位置の情報が現れます。

メイン画面のサイズ・位置情報を取得し、表示させることができました。
コードの説明
準備
まずはモジュールのインポートし、tkinterのトップレベルウィジェットを作成します。
インポートするモジュールはtkinterのみです。
import tkinter #1 サイズ・位置情報取得ボタンクラス if __name__ == "__main__": root = tkinter.Tk() #2 ボタンの生成 root.mainloop()
1.サイズ・位置情報取得ボタンクラス
次に、画面のサイズ・位置情報を取得し、タイトルに表示するボタンのクラスを作成していきます。
Buttonクラスを継承させ、名前はGeoButtonとしました。
#1 サイズ・位置情報取得ボタンクラス class GeoButton(tkinter.Button): def __init__(self, master=None): super().__init__( master, width=15, text="click!", command=self.get_geo #クリック時に実行 ) self.master = master #トップレベルウィジェット def get_geo(self): #サイズ・位置を取得 self.config(text = self.master.geometry())
ボタンをクリックすると、ボタンのタイトルをgeometryメソッドで取得したメイン画面のサイズ・位置情報に変更するように設定されています。
2.ボタンの生成
最後に、GeoButtonクラスのインスタンスを生成して完了です。
#2 ボタンの生成
b = GeoButton(master=root)
b.pack()
コード全体
import tkinter #1 サイズ・位置情報取得ボタンクラス class GeoButton(tkinter.Button): def __init__(self, master=None): super().__init__( master, width=15, text="click!", command=self.get_geo #クリック時に実行 ) self.master = master #トップレベルウィジェット def get_geo(self): #サイズを取得 self.config(text = self.master.geometry()) if __name__ == "__main__": root = tkinter.Tk() #2 ボタンの生成 b = GeoButton(master=root) b.pack() root.mainloop()
メイン画面の初期位置を右上隅に設定
メイン画面のサイズ・位置を設定する方法
geometryメソッドを用いることで、メイン画面のサイズと位置を自由に設定することが可能です。
例として、300x150の画面を、(100, 100)の位置に出現させてみます。
import tkinter if __name__ == "__main__": root = tkinter.Tk() root.geometry("300x150+100+300") root.mainloop()
このように、geometryメソッドに各情報を文字列にして渡すことで、画面のサイズ、位置を設定することが可能です。

この機能を利用した簡単なアプリを作成しながら、使い方を確認していきます。
動作内容
ボタンを押すと、メイン画面をモニタの右上隅移動させるアプリを作成してみます。
最初に、完成した画面を示します。

ボタンをクリックすると、メイン画面がモニタの右上隅に移動します。

画面位置を任意の位置に変更することができました。
コードの説明
準備
モジュールのインポートし、tkinterのトップレベルウィジェットを作成します。
今回もインポートするモジュールはtkinterのみです。
import tkinter #1 メイン画面を右上隅に移動させるボタンクラス if __name__ == "__main__": root = tkinter.Tk() #2 ボタンの生成 root.mainloop()
1.メイン画面を右上隅に移動させるボタンクラス
#1 メイン画面を右上隅に移動させるボタンクラス class MoveButton(tkinter.Button): def __init__(self, master=None): super().__init__( master, width=15, text="click!", command=self.move_pos #クリック時に実行 ) self.master = master #トップレベルウィジェット def move_pos(self): #画面位置変更 w = self.winfo_screenwidth() #モニタ幅を取得 w = w - 120 #モニタ幅からメイン画面サイズ分マイナス self.master.geometry("120x100+"+str(w)+"+0") #位置設定
Buttonクラスを継承させたMoveButtonクラスを作成し、クリック時に画面位置を右上隅に移動させる機能を追加します。
まず、メイン画面の位置をモニタ右隅に移動させるには、モニタのサイズ情報が必要になります。
tkinter.Buttonのwinfo_screenwidthメソッドを用いることで、モニタの幅情報を取得することができます。同様にwindo_screenheightメソッドではモニタの高さ情報が取得できます。このメソッドは、Buttonだけでなくtkinterのほかのウィジェットでも使用できます。
クリック時に実行されるmove_posメソッド内でモニタ情報を取得し、geometryメソッドでXY座標を以下の通りに設定することで、メイン画面を右上隅に移動させます。
- X座標:モニタ幅から画面幅を引いた値
- Y座標:0
2.ボタンの生成
最後に、MoveButtonクラスのインスタンスを生成して完了です。
#2 ボタンの生成
b = MoveButton(master=root)
b.pack()
コード全文
import tkinter #1 メイン画面を右上隅に移動させるボタンクラス class MoveButton(tkinter.Button): def __init__(self, master=None): super().__init__( master, width=15, text="click!", command=self.move_pos #クリック時に実行 ) self.master = master #トップレベルウィジェット def move_pos(self): #画面位置変更 w = self.winfo_screenwidth() #モニタ幅を取得 w = w - 130 #モニタ幅からメイン画面サイズ分マイナス self.master.geometry("100x100+"+str(w)+"+0") #位置設定 if __name__ == "__main__": root = tkinter.Tk() #2 ボタンの生成 b = MoveButton(master=root) b.pack() root.mainloop()