PythonのGUIライブラリTkinterでウィンドウを作る方法

459, 2022-04-22

目次

PythonのGUIライブラリTkinterでウィンドウを作る方法

Pythonの標準GUIライブラリには「Tkinter(ティーキンター)」があります。
このTkinterを使うとPythonで簡単にGUIアプリを作ることができます。

この記事ではTkinterを使ってウィンドウとラベルを表示するところまで解説します。

おまちください! この記事を読めばTkinterの基礎がわかりますよ?
ぜひ読んでいってください。損はさせません。

では解説していきます。

(^ _ ^)

Tkinterの世界へヨーソロ

関連記事
受信と送信を並行に行えるクライアントの作成【Python, Tkinter, socket】

Tkinterのインポート方法

Tkinterは標準ライブラリなので、インポートするだけで使うことができます。
↓のようにインポートします。

import tkinter

または↓のように「tk」という別名を付けておく方法もよく使われます。

import tkinter as tk

as」はインポートしたオブジェクトの別名を指定するキーワードです。
↑の場合は「tkinter」というモジュールに「tk」という別名をつけています。
あくまで別名なので「tkinter」と「tk」の中身は同じになります。

UbuntuでTkinterがない場合

UbuntuなどのLinuxを使っているとTkinterがインストールされていないときがあります。
Ubuntu20.04では↓のコマンドでTkinterをインストールできます。

$ sudo apt install python3-tk

Tkinterでウィンドウを作る

Tkinterでウィンドウを作る方法はいろいろあります。
これは方法が1つではないということです。

プログラマーによって書かれるコードが異なることがあります。
しかし、大本のところはみんな共通です。

それは「Tk」クラスを使うということです。
この「Tk」クラスを継承したクラスを作ると、ウィンドウを表すクラスを作ることができます。

たとえば↓のようにです。

import tkinter as tk


class MyWindow(tk.Tk):
    pass


my_window = MyWindow()
my_window.mainloop()

Windowsで上記のコードを実行すると↓のようなウィンドウが表示されます。

gui-lib-00

具体的にコードを見ていきますと、まず↓の部分です。

class MyWindow(tk.Tk):
    pass

ここではtk.Tkクラスを継承したMyWindowクラスを作っています。
これがウィンドウを表示するクラスになります。

次に↓の部分ですが、

my_window = MyWindow()  # MyWindowをオブジェクトにする
my_window.mainloop()  # ウィンドウを起動する

まずMyWindowクラスをmy_windowというオブジェクトにします。
そしてmainloop()を呼び出してウィンドウを起動します。

mainloop()はウィンドウを起動するメソッド」と覚えておいてください。

ウィンドウにタイトルを付ける

では次にウィンドウに任意のタイトルを付けてみます。
MyWindowのイニシャライザを改造します。
↓のようにします。

import tkinter as tk


class MyWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('私のウィンドウです')


my_window = MyWindow()
my_window.mainloop()

まずこのイニシャライザ(__init__())ですが、これはTkクラスのイニシャライザを改造することになります。
最初にsuper().__init__()とやってます。
これは親クラスのイニシャライザを呼び出しています。

MyWindowの親クラスはTkになるわけです。
この親のイニシャライザを呼び出す処理を書いておかないと、ウィンドウがちゃんと構築されません。
この辺は注意してください。

それからself.title('私のウィンドウです')でウィンドウにタイトルを設定しています。
title()メソッドはTkのメソッドです。
これはウィンドウのタイトルを設定します。

ここまでのコードを実行すると↓のようなウィンドウが表示されます。

gui-lib-01

ウィンドウのサイズを変える

ウィンドウのサイズを変えたい場合はTkのgeometry()メソッドを使います。
↓のようにイニシャライザを書きます。

import tkinter as tk


class MyWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('私のウィンドウです')
        self.geometry('400x300')


my_window = MyWindow()
my_window.mainloop()

↑のself.geometry('400x300')という部分がウィンドウのサイズを変えてる部分です。
これは横幅が400px, 高さが300pxになります。
Tkinterのウィンドウのサイズの指定はちょっと変わってますね。

(^ _ ^)

他のライブラリではあまり見ない。特徴的だ

上記のコードを実行すると、ウィンドウサイズが調整されたウィンドウが表示されます。

gui-lib-02

ウィンドウにラベルを配置する

この作成したウィンドウにメッセージを表示させたいとします。
そのような場合、TkinterではウィンドウにGUIのパーツを配置して表示させます。

このGUIのパーツの1つがLabelというクラスです。
↓のようにLabelにメッセージを設定して、ウィンドウに配置します。

import tkinter as tk


class MyWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('私のウィンドウです')
        self.geometry('400x300')

        self.label = tk.Label(self, text='こんにちは、世界!')
        self.label.pack()


my_window = MyWindow()
my_window.mainloop()

上記のコードを実行すると↓のようなウィンドウが表示されます。

gui-lib-03

ラベルがウィンドウ内の↑のほうに配置され、ラベルに設定されたテキストが表示されています。
コードを解説します。

まず↓の部分ですが、

        self.label = tk.Label(self, text='こんにちは、世界!')

ここではLabelをオブジェクトにしています。
Labelの第1引数にはラベルの親ウィジェット、textには表示させたい文字列を指定します。
親ウィジェットはここあではMyWindowになります。
そのためselfを指定します。

次に↓の部分です。

        self.label.pack()

↑のpack()はウィンドウ内にラベルを配置するメソッドです。
こうするとラベルを配置できます。
このpack()には「どのようにラベルを配置するか?」という情報を与えることができます。

たとえば↓のようにpack()を書きます。

        self.label.pack(expand=True, fill=tk.BOTH)

expandは親ウィジェットの伸縮にラベルを合わせるかどうかのフラグです。

fillは配置領域をラベルで埋めるかどうかのフラグです。
tk.BOTHを指定すると上下左右を埋めます。

この指定を行いコードを実行すると↓のようなウィンドウが表示されます。

gui-lib-04

↑のようにメッセージが中央に表示されるようになります。

おわりに

今回はPythonのGUIライブラリであるTkinterの使い方を紹介しました。
Tkinterは標準ライブラリのGUIなので使えるようになっておくと非常に捗ると思います。

(^ _ ^)

GUIアプリを作ろう

(・ v ・)

リッチな表示で付加価値を高める

この記事のアンケートを送信する