tachitomonn’s blog

IT技術関連の学習メモがメインでたまに趣味のこととか

Python でGUI tkinter

PythonGUI の古典的定番の tkinter ライブラリを触ってみます。
まあ、ほとんど写経ですけど。

参考にさせていただいたのはこちら。
Pythonで簡単なGUIを作れる「Tkinter」を使おう - Qiita
tkinter --- Tcl/Tk の Python インタフェース — Python 3.8.2 ドキュメント

今回の環境では標準ライブラリに含まれているのでインストールは不要です。
コマンドラインから以下のコマンドを実行して Tk インターフェースを表示するウィンドウが開けば使用できる Tcl/Tk がどのバーションなのかがわかります。

>py -3 -m tkinter

今回はversion8.6でした。

とりあえずやってみましただけのスクリプトその1。
テキストとボタンがあってボタンをクリックするとボタンの表記が変わるだけのもの。

#! /usr/bin/env python
# -*- coding: utf8 -*-

import tkinter as tk

def submit(b):
    """ボタンが押されたら実行される
    """
    b["text"] = "submited"

root = tk.Tk() #トップレベルウィジェット(メインウィンドウ)
root.title("sample app") #メインウィンドウのタイトルを変更
root.geometry("640x480") #メインウィンドウサイズの変更
label = tk.Label(root, text="Hi!") #テキストラベルを生成
label.grid() #生成したテキストラベルを表示
button = tk.Button(root, text="submit", command=lambda: submit(button)) #ボタンを生成
button.grid() #生成したボタンを表示
root.mainloop() #メインウィンドウを表示して無限ループ

メインウィンドウを作ってそこに必要なウィジェットを定義、表示していく。最後におまじない。

とりあえずやってみましただけのスクリプトその2。
公式ドキュメントを参考にして同じことをクラスを使用して書いてみた。

#! /usr/bin/env python
# -*- coding: utf8 -*-

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.master.title("sample app")
        self.master.geometry("640x480")
        self.pack()
        self.create_widgets()

    def submit(self):
        self.button["text"] = "submited"
    
    def create_widgets(self):
        self.label = tk.Label(self, text="Hi!")
        self.label.pack()
        self.button = tk.Button(self, text="submit")
        self.button["command"] = self.submit
        self.button.pack()

if __name__=="__main__":
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

何かちゃんとしたもの作るならこっちの書き方でしょうね。