コンテンツにスキップ

Tkinterの使い方

Tkinterを利用したGUIアプリケーションの作成方法をまとめる。

import

Python
import tkinter as tk

最低限の実装

Python
import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master.title('title name')
        self.master.geometry('500x500')

if __name__=='__main__':
    f = Application()
    f.pack()
    f.mainloop()

タイトルバーと画面サイズの実装です。

Label の実装

文字を表示する関数です。

Python
import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master.title('title name')
        self.master.geometry('500x500')

        # ラベルの実装
        label = tk.Label(self, text='label name')
        label.grid(row=0, column=0)

if __name__=='__main__':
    f = Application()
    f.pack()
    f.mainloop()

ラベルを実装するためにはLabel関数を使います。 ラベルを表示するにはgrid関数を使います。

label 引数

引数の一部です。

  • text: 実際に表示される文字
  • sticky: 配置に余裕があれば、引き伸ばされます。
    • Tk.CENTER: 中央
    • Tk.N: 上
    • Tk.S: 下
    • Tk.W: 右
    • Tk.E: 左

Tk.NWのようにすれば右上に配置されます。英語の方角に対応しています。 Tk.N + Tk.Sのように足し算すると、上下に引き伸ばされます。 CENTER以外を足すと、全体的に引き伸ばされます。

grid とは

生成したラベルやボタンなどを表示させるためには、いくつか方法があります。 その一つがgridです。 gridは行と列を指定して配置する方法です。 ほかの方法はpackplaceになります。

grid 引数

引数の一部です。 * row: 行指定 * rowspan: 複数行に配置するときに使います * column: 列指定 * columnspan: 複数列に配置するときに使います

Entry の実装

1行だけのテキストボックスを実装するときに使います。

Python
import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master.title('title name')
        self.master.geometry('500x500')

        # entry の実装
        entry = tk.Entry(self, width=10)
        entry.grid(row=0, column=0)

if __name__=='__main__':
    f = Application()
    f.pack()
    f.mainloop()

Entry の引数

引数の一部です。

  • width: 幅を設定します

Entry のメソッド

メソッドの一部です。

  • get(): 入力された文字列を取得します
  • delete(first, last): 引数で与えられた分を含んで消去します。文字列の先頭を0として指定します。文字列の最後を指定する方法は、endという文字列を渡します。最後からx番目の文字と指定したい場合は、end-xcとします。たとえば、すべて消去したいときは、('0', 'end')と書きます。

Text の実装

複数行にわたってテキストボックスを実装するときに使います。

Python
import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master.title('title name')
        self.master.geometry('500x500')

        # text の実装
        text = tk.Text(self, width=10)
        text.grid(row=0, column=0)

if __name__=='__main__':
    f = Application()
    f.pack()
    f.mainloop()

Text の引数

引数の一部です。

  • width: 幅を設定します
  • height: 行数を設定します

Text のメソッド

  • get(first, last): 引数で与えられた分を含んで取得します。文字列の先頭を0として指定します。文字列の最後を指定する方法は、endという文字列を渡します。最後からx番目の文字と指定したい場合は、end-xcとします。たとえば、すべて取得したいけど、最後の改行コードはいらないときは、('0', 'end-1c')と書きます。
  • delete(first, last): 引数で与えられた分を含んで消去します。文字列の先頭を0として指定します。文字列の最後を指定する方法は、endという文字列を渡します。最後からx番目の文字と指定したい場合は、end-xcとします。たとえば、すべて消去したいときは、('0', 'end')と書きます。

Button の実装

Python
import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master.title('title name')
        self.master.geometry('500x500')

        # ボタンの実装
        button = tk.Button(self, text='button')
        button.grid(row=0, column=0)

if __name__=='__main__':
    f = Application()
    f.pack()
    f.mainloop()

Button の引数

引数の一部です。

  • text: 実際に表示される文字
  • command: クリックしたときの動作設定します。関数を指定する場合は()を消す必要があります。

Checkbutton の実装

Python
import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master.title('title name')
        self.master.geometry('500x500')
        self.wiget()

    def wiget(self):
        # チェックボタンの True, False の設定
        bln = tk.BooleanVar()
        bln.set(True)

        # チェックボタンの実装
        checkButton = tk.Checkbutton(self, variable=bln, text='check Button')
        checkButton.grid(row=0, column=0)

        # オマケ
        def boo():
            # こうやって BooleanVar を使わないと最初からチェックがつかない?(環境:python=3.7.0)
            if bln.get():
                print('boo')
        button = tk.Button(self, text='oo', command=boo)
        button.grid(row=1, column=0)


if __name__=='__main__':
    f = Application()
    f.pack()
    f.mainloop()
チェックボタンを判定するには Boolean 形式の入る関数であるBooleanVarを使います。これが True だとチェックが入ります。 つまり、チェックボタンを実装するためには、BooleanVarCheckbutton の2つの関数を呼び出す必要があります。

これは僕の環境だからダメなのかわからないのですが、checkButton だけを True にしても最初からチェックされた状態で表示されませんでした。 なぜか、ボタンと関連付けるようにプログラムを書くと、最初からチェックが入るようになります。 バグのような気もするのですが……。

Checkbutton の引数

  • text: 実際に表示される文字
  • variable: チェックされているかどうかを判定します。BooleanVar オブジェクトを渡します。

BooleanVar のメソッド

  • set(): True か False しか受け付けません
  • get(): 呼び出されたときのBooleanVar オブジェクトの値を返します。

参考ホームページ

公式ドキュメント (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html)

紫藤のページ-On Python (http://www.shido.info/py/index.html)

How to get the input from the Tkinter Text Box Widget? (https://stackoverflow.com/questions/14824163/how-to-get-the-input-from-the-tkinter-text-box-widget)

PythonのTkinterを使ってみる (https://qiita.com/nnahito/items/ad1428a30738b3d93762)