プログラミングコードの実験場

基礎を覚え、実験、検証を行う場

クラスとオブジェクトを使用して Tkinter GUI を作成する

クラスとオブジェクトを使用して Tkinter GUI を作成してみます。

今回は、インストール不要、設定不要の「Replit(https://replit.com/)」を用いて作成します。

「Replit」にログインすると、「Create Project」をクリック。クリックすると、「Create a Project」ウインドウが表示。表示後、ウインドウ内の「Template」で「tKinter」と検索すると、「TKinter」のテンプレートが使えます。選択後、「Create Project」ボタンをクリックで、プロジェクトが作成されます。

■コード

'''

import tkinter as tk


class MyGUI:

  def __init__(self, master):
    self.master = master
    master.title("My GUI")

    self.label = tk.Label(master, text="This is a label")
    self.label.pack()

    self.button = tk.Button(master,
                            text="Click me!",
                            command=self.do_something)
    self.button.pack()

  def do_something(self):
    print("Button was clicked!")


root = tk.Tk()
my_gui = MyGUI(root)
tk.mainloop()

'''

importでtkinterを呼び出します。その後、asでtkとして呼び出します。

呼び出した後に、MyGUIというclassを定義します。定義後、クラス内にdef文を用いて__init__を記述し、コンストラクタを呼び出せるようにします。括弧内には、クラス内のメソッドで渡される最初の引数,パラメータは、オブジェクト自体でなければならないため、「self(自己)」と記述し、第1の引数として渡します。第2の引数,パラメータとして、masterを設定し、渡します。「self.master  =  master 」と記述し、引数,パラメータとして受け取った値であるmasterをインスタンス変数でmasterへ代入することにより、インスタンス作成時の初期処理として定義されるようにします。定義されるようになったので、「master.title("My GUI")」と記述すると、インスタンス作成時の初期処理としてGUIのタイトルとして表示されます。

その後、「self.label = tk.Label(master, text="This is a label")」、「self.button = tk.Button(master, text="Click me!", command=self.do_something)」を記述し、ラベルとボタンを作成します。それぞれ(ラベルとボタン)の括弧内には第1の引数,パラメータはmasterとすることで、MyGUI というクラスとして定義され設定できるようになります。

次にdef文を用いてdo_somethingという関数を定義します。括弧内には、クラス内のメソッドで渡される最初の引数,パラメータは、オブジェクト自体でなければならないため、「self(自己)」と記述し、第1の引数として渡します。この関数が呼び出されたときに実行される処理として、print()で文字列を出力させます。なお、do_somethingという関数は、作成されたボタンとバインド(関連付け)されているので、ボタンをクリックするたびに関数が呼び出されます。

関数を定義後、「root = tk.Tk()」と記述しインスタンス化しウインドウを作ります。作った後に「my_gui = MyGUI()」でインスタンス化します。このときに括弧内に引数,パラメータとして、先ほどのTkインスタンスを渡します。これでオブジェクト(GUI)が作成された。

最後に、先ほどのTkインスタンスで mainloop()を用いて、GUI のイベント ループを開始する。イベントループを開始する理由は、GUIアプリの画面を表示したままの状態にすることです。

■実行・検証

スクリプトを実行してみると、OutputでGUIが出力され、出力されたGUI内の「Click me!」ボタンをクリック。クリックするとConsoleで定義したdo_somethingという関数が呼び出され処理が実行。実行後、「Button was clicked!」と出力されることを確認した。