Rainbow Engine

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
-

執筆者:


  1. honghaier より:

    ‪こんにちは、私はTkinterデザイナーツールソフトウェアを構築するプログラマーです、私はドラッグ制御によってパイソンプログラマーデザイナーユーザーインターフェースを助けようとします。https://github.com/honghaier-game/TKinterDesigner#readme‬

    • RainbowEngine より:

      数年前のコメントへの返信となり、大変遅れてしまいましたことをお詫びいたします。最近、過去のコメントを見直す機会があり、改めて貴重なご意見に感謝しております。

      遅ればせながらですが、Tkinterデザイナーツールの開発、素晴らしい取り組みですね。ドラッグアンドドロップ機能は開発者にとって大変便利なので、多くの方に利用されることでしょう。プロジェクトの成功をお祈りしています!

comment

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

関連記事

PythonにOpenCVを導入して画像を読込み&表示&拡大縮小してみる

(0)目次&概説 (1) OpenCVとは (2) OpenCVのインストール  (2-1) インストール資源の入手  (2-2) インストール時の注意事項  (2-3) インストールの実行 (3) …

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

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

Pythonでcsvのカラム名・テーブルのレコードを取得する方法

今回PythonのPandasライブラリを用いてcsvファイルを読み込み、カラム名やテーブルのレコードを取得する方法をご紹介します。 <目次> (1) Pythonでcsvのカラム名・テーブルのレコー …

PythonでAPI呼び出す時のヘッダー、ボディの指定方法について

  <目次> (1) PythonでAPI呼び出す時のヘッダー、ボディの指定方法について  (1-1) 記事の概要  (1-2) ①「ヘッダー」の指定方法  (1-3) ②「ボディ」の指定方 …

「pyenv」の導入後も「System Python」が有効になってしまう事象の原因と対処について

  <目次> (1) 「pyenv」の導入後も「System Python」が有効になってしまう事象の原因と対処について  (1-1) 問題点の整理  (1-2) 原因&対策(1つ目)  ( …

  • English (United States)
  • 日本語
Top