Rainbow Planet

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Python

Pythonで画面作成をtkinterで行う方法(入門編)

投稿日:2021年1月15日 更新日:

<目次>

(1) Pythonで画面作成をtkinterで行う方法(入門編)
 (1-1) tkinterとは?
 (1-2) STEP1:tkinterモジュールのインポート
 (1-3) STEP2:GUIのウィンドウを作成
 (1-4) STEP3:ウィジェットの追加
 (1-5) STEP4:ユーザからのイベントに対する処理を追加
 (1-6) window.mainloop()メソッドについて
 (1-7) サンプルプログラム

(1) Pythonで画面作成をtkinterで行う方法(入門編)

(1-1) tkinterとは?

tkinterはPythonでGUIを使うためのパッケージで、Tk GUIツールキットへのインターフェイスとなっています。

本記事では以下の4つのSTEPに沿って、画面描画の疎通を行いたいと思います。

STEP1:tkinterモジュールのインポート
STEP2:GUIのウィンドウを作成
STEP3:ウィジェットの追加
STEP4:ユーザからのイベントに対する処理を追加
 

(1-2) STEP1:tkinterモジュールのインポート

まずはモジュールのインポートを行います。大抵の場合は「tkinter」のみで事足ります。

import tkinter as tk

目次にもどる

(1-3) STEP2:GUIのウィンドウを作成

次に「Tkクラスのインスタンス化」を行います。この意味を掴むためにはTkinterの仕組みについて少し触れさせて頂きます。
 
Tkinterのコマンドは内部的にはインタープリタ(翻訳者的な)によって、tcl/tk(*注1)のコマンドに変換され、その形式で実行されます。そして、そのインタープリタを初期化して、Windowの雛形を作成するのが「Tkクラスのインスタンス化」の目的になります。
 
(*注1)
tcl/tkはPythonに組み込まれた機能で、GUI開発の各種機能を提供します。tkinterはそのTkウィジェットを実装したラッパーとなっており、そのためインタープリタを介して処理を実行します。tkはtool kitの略で各種GUI機能を備えています。
 
(STEP2)
import tkinter as tk

if __name__ == '__main__':
    #Tkクラスのインスタンス化
    top = tk.Tk()
    top.mainloop()

(図131)実行結果

目次にもどる

(1-4) STEP3:ウィジェットの追加

ウィンドウが出来たら、次はウィジェット(画面の部品)を追加していきます。

ウィンドウへの追加はいくつか方法がありますが、今回はラベルウィジェットのpack()メソッドを使います。ウィンドウにpack()でウィジェットを追加すると、Tkinterはウィンドウの大きさを出来る限り小さくしようとします。

(例:ラベル追加)

    #ラベルウィジェット(label)の作成
    [変数名] = tkinter.Label(text="[画面に表示したいテキスト]")
    #ウィンドウへの追加
    [変数名].pack()

(例:入力ボックス追加)

    #入力ボックス(entry)の作成
    [変数名] = tk.Entry (window)
    #ウィンドウへの追加
    [変数名].pack()

 

(STEP3)構文をプログラム本体に追記

import tkinter as tk
def main():
    pass

if __name__ == '__main__':
    #Tkクラスのインスタンス化
    window = tk.Tk()
    #ラベルウィジェット(label)の作成・ウィンドウへの追加
    label = tk.Label(window,text = "Sample Label");
    label.pack()
    #入力ボックス(entry)の作成・ウィンドウへの追加
    entry = tk.Entry (window)
    entry.pack()
    window.mainloop()

(図141)実行結果

目次にもどる

(1-5) STEP4:ユーザからのイベントに対する処理を追加

あとは画面の目的に合わせて、必要なウィジェットを追加したり、ユーザからのイベント(ボタン押下やマウスクリック等)に対応する処理を実装していきます。

このステップについては、下記の別記事にてご紹介いたします。
⇒※2020年1月中に執筆予定

目次にもどる

(1-6) window.mainloop()メソッドについて

最後に書いている「window.mainloop()」はTkinterのプログラムの実行準備が出来た場所で使用するメソッドで、Tkinterの「イベントループ」を実行するように指示します。「イベントループ」の実態は、イベントを待ち受ける「無限ループ」で、ウィンドウが閉じられるまでの間、このループは「ボタン押下」や「キー操作」といったイベントをリッスン(アクセスに備えて待機)しています。

このメソッドを追加しないと、Tkinterのアプリケーションは実行されません
 

(1-7) サンプルプログラム

先程のウィンドウ描画・ウィジェットの追加などをクラスに定義したプログラムを掲載します。

やっている処理自体は(STEP3)と同じですが、ウィンドウ描画・ウィジェット追加は「Window()」クラスにて定義しており、main文ではそのコンストラクタを呼んでウィンドウを描画しています。

このプログラム中で登場する「コンストラクタ(__init__)」や「設定ファイルの読み込み(configparser)」については、それぞれ別の記事にて解説していますので、もしご興味があれば併せてご覧下さい。
⇒①コンストラクタ(__init__)
⇒②設定ファイルの読み込み(configparser)

(サンプルプログラム)

import configparser
import sys
import tkinter as tk
from tkinter import ttk
#INIファイルの読み込み
conf=configparser.ConfigParser()
conf_path='WindowConfig.ini' if 1==len(sys.argv) else sys.argv[1]
conf.read(conf_path,encoding='cp932')

#INIファイルからウィンドウ関連の設定値を取得
WINDOW_TITLE = conf.get('WINDOW','title')
WINDOW_WIDTH = conf.get('WINDOW','width')
WINDOW_HEIGHT = conf.get('WINDOW','height')
WINDOW_BG = conf.get('WINDOW','bg')

class Window():
    # コンストラクタでメンバ変数を初期化
    def __init__(self):
        #Tkクラスのインスタンス化(ウィンドウの生成)
        self.window = tk.Tk()
        self.window.geometry(str(WINDOW_WIDTH)+'x'+str(WINDOW_HEIGHT))
        self.window.title(WINDOW_TITLE)
        self.window.config(bg=WINDOW_BG)
        #ラベル(label)の定義・追加
        label = tk.Label(self.window,text = "Sample Label");
        label.pack()
        #入力ボックス(entry)の定義・追加
        entry = tk.Entry (self.window)
        entry.pack()
        #イベントループの追加(ウィンドウが閉じるまでユーザアクションをリッスン)
        self.window.mainloop()

if __name__ == '__main__':
    #コンストラクタを呼び出し
    Window()

(図171)実行結果

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Python

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

PythonのPandas使用時に発生した「UnicodeEncodeError: ‘ascii’ codec can’t encode characters~」エラーの対処方法について

(0)目次&概説 (1) エラー対応1:UnicodeEncodeError  (1-1) 発生状況・エラーメッセージ   (1-1-1) エラーメッセージ   (1-1-2) エラーとなったソース …

PythonのTkinterでテキストボックスの値を取得する方法

<目次> (1) PythonのTkinterでテキストボックスの値を取得する方法  (1-1) 構文  (1-2) キャンバスの設定  (1-3) 入力ボックスの追加  (1-4) ボタン押下時の処 …

PythonでPandasライブラリを用いてcsvファイルを読み込む方法

<目次> (1) PythonでPandasライブラリを用いてcsvファイルを読み込む方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) read_csvの主要なオプションご紹介 …

Pythonでcsvを読み込んでデータベース化する方法~pandasのto_sqlを用いたテーブルへのINSERT~

<目次> (1) Pythonでcsvを読み込んでデータベース化する方法  (1-1) 構文(to_sql)  (1-2) 構文(to_sql)の引数  (1-3) サンプルプログラム (1) Pyt …

Pythonのコンストラクタの基礎と「self」や「__init__」について

<目次> (1) Pythonのコンストラクタの基礎と「self」や「__init__」について  (1-1) 「__init__」やコンストラクタについて  (1-2) コンストラクタで使われる「s …

  • English (United States)
  • 日本語
Top