TSUBOCK★LABO-ツボックラボ-

とあるセキュリティエンジニアの技術メモブログ

MENU

Tkinterを使ってPythonプログラムのGUIを作る

f:id:panda-loves-smile:20200204162932p:plain

Pythonで業務用ツールを作成したときに、あまりPC操作が得意でない人にCUIから操作してもらうというのはなかなかハードルが高かったりします。そこで、GUIを用意してボタン1つで操作ができると、心理的ハードルも下げることができるので、PythonプログラムをGUIすることにしました。PythonでGUIを作成する方法はいくつかあるのですが、今回はTKinterについて調べてみました。

Tkinkerとは

読み方はティキンターと読むようです。TkinterはWindowsやMacOS、LinuxといったOSに対応しているマルチプラットフォームなGUIライブラリでPythonを使ってGUIを作成することができます。TKinkterはPythonに標準で付属しているのでPythonさえ入っていれば動作させることができます。

インストール

Ubuntuではaptパッケージとしてインストールできます。

$ sudo apt-get -y install python3-tk

使ってみる

それではTinkerを使って入力欄に値を入力後、ボタンを押すとアクションを起こすGUIを作成してみたいと思います。

rootウィンドウを作ってみる

最初は必ずrootウィンドウを作成する必要があります。

tkinterをimportするのを忘れずに。

import tkinter as tk
root = tk.TK()
root.mainloop()

これで何も表示されないウィンドウが出来上がります。

f:id:panda-loves-smile:20200315002047p:plain

上記のソースの2行目と3行目の間に配置したいモジュールや設定したい項目を記載していきます。

入力欄(テキストボックス)を作成

テキストボックスを作成します。今回配置するテキストボックスは改行ができないタイプのものになります。

import tkinter as tk

root = tk.TK()

txtBox = tk.Entry()
txtBox.configure(state='normal', width=30)
txtBox.pack()

root.mainloop()

Entry()で呼び出して使用します。configure()メソッドでステータスの設定変更や幅などを設定することができます。

f:id:panda-loves-smile:20200315002057p:plain

ボタンを作成

ボタンはButton()メソッドを呼び出して使用します。

ボタンが押された際の処理は.bind("クリック関数", 呼び出したい関数)というように記載します。

今回はボタンだけ配置します。

import tkinter as tk

root = tk.TK()

txtBox = tk.Entry()
txtBox.configure(state='normal', width=30)
txtBox.pack()

button = tk.Button(text='ボタン', width=20)
button.bind('<Button-1>',)
button.pack()

root.mainloop()

ボタンだけなのでクリックしても何も起きないボタンが配置されました。

f:id:panda-loves-smile:20200315002107p:plain

ボタン押下後のアクションを作成

bind()で呼び出されるアクションを作成します。今回はボタンを押したら、入力欄に入れている値をポップアップウィンドウで表示します。

ポップアップウィンドウはmessagebox()メソッドを呼び出して使用します。

messageboxはいくつか種類がありますが、今回は情報を表示するだけのメッセージボックスを使用します。 messageboxはtkinterからimportする必要があるので、importしてください。

import tkinter as tk
from tkinter import messagebox

root = tk.TK()

def check_msg_value(event):
    value = txtBox.get()
    msgBox = messagebox.showinfo('入力値チェック', 'あなたが入力した値は%sです。' % value)   

txtBox = tk.Entry()
txtBox.configure(state='normal', width=30)
txtBox.pack()

button = tk.Button(text='ボタン', width=20)
button.bind('<Button-1>',)
button.pack()

root.mainloop()

txtBox.get()でテキストボックスに入力されている入力値を取得することができます。今回作成した関数の追加に合わせて呼び出し元のボタンの方も修正しておきましょう。

import tkinter as tk
from tkinter import messagebox

root = tk.TK()

def check_msg_value(event):
    value = txtBox.get()
    msgBox = messagebox.showinfo('入力値チェック', 'あなたが入力した値は%sです。' % value)   

txtBox = tk.Entry()
txtBox.configure(state='normal', width=30)
txtBox.pack()

button = tk.Button(text='ボタン', width=20)
button.bind('<Button-1>', check_msg_value)
button.pack()

root.mainloop()

先ほどはアクションを設定していませんでしたが、ボタンを押すとこのように

f:id:panda-loves-smile:20200315002122p:plain

メッセージが表示されます。ね、簡単でしょ?

今回はざっくりと配置してみましたが、ちゃんとウインドウサイズを設定したり、プログラムのタイトルバーに名前を付けたりすることもできます。

触ってみると簡単にGUIの作成ができるので、ちょっとしたプログラムをGUI化するのにはTkinterが便利で使いやすいですね。

参考:Tkinterのリファレンス