初心者でもPythonを使ってみよう

趣味と実益を兼ねたPython学習記

【スポンサーリンク】



【tkinter】 画面のサイズ・位置の設定方法 【Python】

tkinterのメイン画面の位置やサイズの情報は、トップレベルウィジェットのgeometryメソッドを用いて取得・調整することができます。

メイン画面の位置・サイズを調整する方法について、実際にコードを作成しながらまとめました。

メイン画面のサイズ・位置情報の取得

動作内容

ボタンをクリックすると、現在のメイン画面のサイズと位置を取得し、表示するアプリを作成してみます。

最初に、完成した画面を示します。

f:id:vigilantPotato:20191113214816p:plain

tkinterのメイン画面に、ボタンが一つだけ表示されています。

ボタンをクリックすると、現在のメイン画面サイズと位置を取得し、ボタンのタイトルに表示します。

f:id:vigilantPotato:20191113214829p:plain

最初の二組が画面サイズ、後ろの二組が座標を意味しています。

画面サイズや位置を変えてクリックすると、その時のサイズ・位置の情報が現れます。

f:id:vigilantPotato:20191113214949p:plain

メイン画面のサイズ・位置情報を取得し、表示させることができました。

[↑ 目次へ]

コードの説明

準備

まずはモジュールのインポートし、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メソッドに各情報を文字列にして渡すことで、画面のサイズ、位置を設定することが可能です。

f:id:vigilantPotato:20191113215937p:plain

この機能を利用した簡単なアプリを作成しながら、使い方を確認していきます。

[↑ 目次へ]

動作内容

ボタンを押すと、メイン画面をモニタの右上隅移動させるアプリを作成してみます。

最初に、完成した画面を示します。

f:id:vigilantPotato:20191113220212p:plain

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

f:id:vigilantPotato:20191113220358p:plain

画面位置を任意の位置に変更することができました。

[↑ 目次へ]

コードの説明

準備

モジュールのインポートし、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()

[↑ 目次へ]