Python

PythonでGUIアプリ作るならTkinter

PythonでGUIアプリ作るならTkinter

PythonでGUIアプリを作りたい。
Pythonでのコーディングに慣れてくると、コマンドベースの処理の他にもWEBやGUIアプリケーションを作りたくなる。
今回はPythonでGUIアプリを作る為の「Tkinter」の使い方を紹介する。



Tkinterとは?

GUIアプリがコマンドベースのCUIアプリと異なる点、それはグラフィカルなユーザーインターフェースを持っている事。

  • ウィンドウ
  • テキストエリア
  • ボタン
  • 他にも色々

GUIアプリを作る為にはこれらの部品をコードから呼び出さなければならない。
そこで画面の部品を呼び出してくれるのがTkinterである。

Tkinter は Python からGUIを構築・操作するための標準ライブラリ(ウィジェット・ツールキット)である。
Tcl/Tk の Tk 部分を Python で利用できるようにしたもので、使い方も可能な限り Tcl/Tk にあわせられるように作られている。 これにより、スクリプト言語である Python から簡単にGUI画面をもったアプリケーションを作ることが可能になる。
Tkinter - Wikipedia


使い方

主な使い方は以下の通り。

  1. 部品をインスタンスとして呼び出す
  2. 部品を親部品と紐づける
  3. 部品の位置を決めて表示する
  4. 部品のイベントと処理を紐づける
import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
root.title('Tkinter Test')

#処理
def btn1_click():
    textarea1.delete('1.0',tk.END)
    textarea1.insert("1.0", "btn1_click")

def btn2_click():
    textarea1.delete("1.0",tk.END)
    textarea1.insert("1.0", "btn2_click")

#親フレーム
frame_main = ttk.Frame(
    root,
    height=200,
    width=300,
    borderwidth=5)
frame_main.grid()

#子フレーム1
frame_sub1 = ttk.Frame(
    frame_main)
frame_sub1.grid(row=0, column=0)

#子フレーム2
frame_sub2 = ttk.Frame(
    frame_main)
frame_sub2.grid(row=0, column=1)

#ボタン1
btn1 = ttk.Button(
    frame_sub1,
    text='Button1',
    command=btn1_click)
btn1.grid(row=0, column=0)

#ボタン2
btn2 = ttk.Button(
    frame_sub1,
    text='Button2',
    command=btn2_click)
btn2.grid(row=1, column=0)

#テキストフィールド
textarea1 = tk.Text(frame_sub2, height=10, width=20, wrap=tk.CHAR)
textarea1.grid(row=1, column=0, padx=2, pady=2, sticky=tk.NW)

#画面を保持し続けるおまじない
root.mainloop()

部品をインスタンスとして呼び出す

子フレームの呼び出しを例にすると、frame_sub1Frame クラスのインスタンスとして呼び出しているのがわかる。

#子フレーム1
frame_sub1 = ttk.Frame(
    frame_main)

他のボタンやテキストフィールド等も同様にインスタンスとして呼び出している。


部品を親部品と紐づける

同じく子フレームの呼び出しを例にすると、frame_sub1 を定義する際の引数に親フレームである frame_main を指定している。
この操作により、 frame_sub1frame_main に紐づけられた部品として定義される。

#子フレーム1
frame_sub1 = ttk.Frame(
    frame_main)


部品の位置を決めて表示する

同じく子フレームの呼び出しを例にすると、 grid(row=0, column=0) によって、親フレームである frame_main の中をグリッド状に分けて0行目の0列目の位置に表示される。
frame_sub2grid(row=0, column=1) なので0行目の1列目に表示される。

#子フレーム1
frame_sub1 = ttk.Frame(
    frame_main)
frame_sub1.grid(row=0, column=0)

#子フレーム2
frame_sub2 = ttk.Frame(
    frame_main)
frame_sub2.grid(row=0, column=1)


部品のイベントと処理を紐づける

ボタンを例にすると、 btn1 を宣言する際に command=btn1_click と指定する事により、ボタンを押された際に btn1_click() の処理を実行するようになる。

#処理
def btn1_click():
    textarea1.delete("1.0",tk.END)
    textarea1.insert("1.0", "btn1_click")
#ボタン1
btn1 = ttk.Button(
    frame_sub1,
    text='Button1',
    command=btn1_click)
btn1.grid(row=0, column=0)


まとめ

  • PythonでGUIアプリを作る際はTkinterを利用すると簡単に作る事ができる。


KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。
If you felt this article is useful, please share.
にほんブログ村 IT技術ブログへ

-Python
-,

Translate »
Social media & sharing icons powered by UltimatelySocial

Copyright© ITips , 2020 All Rights Reserved.