Python超入門 #005 GUIライブラリ(Tkinter)

前回までの超入門は

前回までのPython超入門は、pythonのインストール、ライブラリのインストール方法、そのうちWebページの自動入出力を行うseleniumライブラリの使い方について触れました。今回はGUIライブラリの一つであるTkinterの使い方について触れたいと思います。

pythonにおけるGUIライブラリ

pythonではいくつかのGUIライブラリが提供されていますが、ここでは標準でインストール済みのTkinterを使っていきます。ただしTkinterは機能的には強くないということらしく、必要に応じてwxPython(別名Phoenix)などの別のライブラリの利用の検討も可能です。

Tkinterの機能概要

Tkinterとしては以下のような機能があるそうです。

・ラベル
・1行入力ボックス(エントリー)
・ボタン
・チェックボックス
・ラジオボタン
・リストボックス
・メニュー
・スクロールバー
・キャンバス

Tkinterの実装の基本系

Tkinterでの実装にあたっては、tkinterのインポート後初期化処理でwindowを表示し部品を配置、部品のアクションに応じた関数を記述するという形になります。

Tkinterで生成したwindowオブジェクトはmainloopメソッドで処理を待ち続けることになりますので、終わらせるには"WM_DELETE_WINDOW"プロトコルでwindowが閉じられたことを検知した後に処理をする関数内もしくは部品のアクションに応じた関数内でdestroyメソッドを呼び出し処理を終了させることになります。コードとしては以下のようなるかと思います。

import tinter as tk

class inputDialog(tk.Tk):

    def close_window(self):
        self.destroy()
        
    def __init__(self):
        tk.Tk.__init__(self)

        #### これ以降で部品を配置する
        
        #### ここまでで部品を配置する
        
        self.protocol("WM_DELETE_WINDOW", self.close.window)
        self.mainloop()

Tkinterの実装例

上記を踏まえ、例として、GUIに値を入力し、OKボタンで他のオブジェクトに値を渡すプログラムを書いていきます。OKボタンを押した時点でwindowは終了してしまいますので、オブジェクトを共有して、共有オブジェクトを介して値を受け渡します。

import tkinter as tk
from globals import *

class inputDialog(tk.Tk):

    def input_ok(self, event)
        global id_BOX
        global pw_BOX

        gv.id =id_BOX.get()
        gv.pw = pw_BOX.get()
        self.destroy()
        
    def close_window(self):
        global id_BOX
        global pw_BOX
        
        gv.id = "-1"
        window.destroy()
        
    def __init__(self):
        tk.Tk.__init__(self)
        global id_BOX
        global pw_BOX

        #### これ以降で部品を配置する
        
        #windowを表示する 
        self.titile("ログインダイアログ")
        self.geometory("300x250")
        
        #ラベルを表示する 
        id_L = tkLabel(text=u"ID:")
        id_L.place(x=100-80+5, y=10) #位置を指定する 
        pw_L = tkLabel(text=u"PW:")
        pw_L.place(x=100-80+5, y=10+(10+32)*1) #位置を指定する 
        
        #入力するボックス (エントリー)を表示する
        id_BOX = tk.Entry(width=20)
        id_BOX.place(x=100+5, y=10) #位置を指定する 
        pw_BOX = tk.Entry(width=20)
        pw_BOX.place(x=100+5, y=10+(10+32)*1) #位置を指定する 
        
        #ボタンを配置する 
        Button = tk.Button(text=u"OK", width=10)
        Button.bind("<Button-1>",self.input.ok) #押した場合の処理先を指定 
        Button.place(x=100-5, y=10+(10+32)*2) #位置を指定する 
        
        #### ここまでで部品を配置する
        self.protocol("WM_DELETE_WINDOW", self.close.window)
        self.mainloop()

これでID,PWを入力するダイアログが表示され、OKを押せば共有オブジェクトに値を入れて終了します。このオブジェクトを呼び出した側は、呼び出した後の処理に入ります。呼び出したあとの処理では、OKを押さずにwindowを閉じた場合にgv.idの値が"-1"になりますのでキャンセル処理を、gv.idの値が"-1"以外の場合に、続きの処理に入るということになります。

次回予告

次回のpython超入門は、pwの伏せ字入力のため、tkではなくテーマ付きのttkへの移行と、seleniumと組み合わせた実行ファイルの例について触れたいと思います。

いかがでしたでしょうか。この記事がお役に立ちましたら「ハートボタン」「フォロー」「サポート」「コメント」での応援よろしくお願いします。

この記事が気に入ったらサポートをしてみませんか?