初心者でもPythonを使ってみよう

趣味と実益を兼ねたPython学習記

【スポンサーリンク】



【tkinter】テキストボックス(Entry)とボタン(Button)の使い方【Python】

テキストボックスはユーザーが任意の入力を行うためのウィジェットです。キーボードを用いて自由に入力することができます。

また、ボタンはクリック時に様々な機能を開始するスイッチとなるウィジェットです。

どちらも、非常に使用頻度の高い便利なウィジェットです。実際にコードを書きながら使用方法を確認してみます。

ボタンクリックでテキストボックスの入力値をボタンのラベルに表示

動作内容

ボタンをクリックするとテキストボックスに入力された値を取得し、ボタンのラベルに表示させるアプリを作成してみます。

最初に、作成したアプリの外観を示します。

f:id:vigilantPotato:20190318214018j:plain

上から、テキストボックスとボタンが並べて表示してあります。

テキストボックスには、ユーザーが任意の文字列を入力することができるので、適当な文字列を入力しておきます。

f:id:vigilantPotato:20190318214213j:plain

次に、ボタンをクリックして入力値を読み取り、ボタンのラベルに表示させます。

f:id:vigilantPotato:20190318214422j:plain

ボタンのタイトルが、テキストボックスに入力した値に変化しました。

テキストボックスへ入力した値をボタンクリックで取得し、ボタンのラベルに表示させることができました。

[↑ 目次へ]

コードの説明

コードの説明をしていきます。

ボタンクリック時に実行する関数

最初に、ボタンクリック時に実行する関数を記述します。

def change_title():
    button1["text"] = entryBox.get() #button1のタイトルをテキストボックスの値に変更

button1は後程作成するtkinterのボタンウィジェット名で、textオプションを用いてボタンのラベルに表示する文字列を変更します。

また、entryBoxも後程作成するテキストボックスウィジェット名で、getメソッドを用いて入力した値を読み取とっています。

ボタン・テキストボックスを生成

次に、ボタンとテキストボックスを生成していきます。

root = tkinter.Tk()

#テキストボックス
entryBox = tkinter.Entry(master=root)
entryBox.pack()

#ボタン
button1 = tkinter.Button(
        master=root,
        text="Button",          #初期値
        width=15,               #幅
        bg="lightblue",         #色
        command=change_title    #クリックに実行する関数
        )
button1.pack()

root.mainloop()

ボタンの生成時には、commandオプションを用いてクリック時に先ほど作成した関数を実行するように設定しています。また、同時にtext、width、bgオプションでボタンの初期値や見た目を設定しています。

[↑ 目次へ]

コード全体

import tkinter

def change_title():
    button1["text"] = entryBox.get() #button1のタイトルをテキストボックスの値に変更

root = tkinter.Tk()

#テキストボックス
entryBox = tkinter.Entry(master=root)
entryBox.pack()

#ボタン
button1 = tkinter.Button(
        master=root,
        text="Button",          #初期値
        width=15,               #幅
        bg="lightblue",         #色
        command=change_title    #クリックに実行する関数
        )
button1.pack()

root.mainloop()

[↑ 目次へ]

ボタンクリックでテキストボックスに文字を入力

動作内容

ボタンをクリックするとあらかじめ設定した文字列をテキストボックスに入力する機能を追加していきます。

完成したアプリの画面は以下の通りです。

f:id:vigilantPotato:20190318221732j:plain

一番下に、「set default」ボタンが追加されました。

このボタンをクリックすると、以下の通りテキストボックスにあらかじめ設定した文字列(今回の例では「default」)が入力されます。

f:id:vigilantPotato:20190318221920j:plain

次に、テキストボックスに適当な値を入力し、先ほど作成したの値取得用ボタンを押してタイトルを変更しておきます。

f:id:vigilantPotato:20190318222025j:plain

そして、その状態で「set default」ボタンを押すと、値取得用ボタンのタイトルも初期値に変更してくれます。

f:id:vigilantPotato:20190318222322j:plain

ボタンクリックであらかじめ設定した文字列を各ウィジェットに入力することができました。

[↑ 目次へ]

コードの説明

追加した部分のみ解説していきます。

初期化用ボタンクリック時に実行する関数

初期化用ボタンクリック時に実行する関数を追加します。

def set_default():
    entryBox.delete(0, tkinter.END) #テキストボックスをクリア
    entryBox.insert(tkinter.END, "default")  #テキストボックスにデフォルト値を入力
    button1["text"] = "Button"  #ボタン1のタイトルを初期化

entryBoxの中身をdeleteメソッドを用いて削除しています。delete(0, tkinter.END)は、テキストボックスないの最初の文字から最後までを削除するという意味です。その後、insertメソッドを用いて文字列「default」を入力するように設定しています。

次に、button1タイトルをtextオプションで初期値の「Button」に設定しています。

初期化用ボタンを生成

次は、初期化用のボタンを生成します。

#ボタン(初期化用)
button2 = tkinter.Button(
        master=root,
        text="set default",
        width=15,
        bg="lightyellow",
        command=set_default)
button2.pack()

先ほどと同様に、commandオプションを用いて、クリック時にset_default関数を実行するように設定しています。

[↑ 目次へ]

コード全体

import tkinter

def change_title():
    button1["text"] = entryBox.get() #button1のタイトルをテキストボックスの値に変更

def set_default():
    entryBox.delete(0, tkinter.END) #テキストボックスをクリア
    entryBox.insert(tkinter.END, "default")  #テキストボックスにデフォルト値を入力
    button1["text"] = "Button"  #ボタン1のタイトルを初期化

root = tkinter.Tk()

#テキストボックス
entryBox = tkinter.Entry(master=root)
entryBox.pack()

#ボタン
button1 = tkinter.Button(
        master=root,
        text="Button",          #初期値
        width=15,               #幅
        bg="lightblue",         #色
        command=change_title    #クリックに実行する関数
        )
button1.pack()

#ボタン(初期化用)
button2 = tkinter.Button(
        master=root,
        text="set default",
        width=15,
        bg="lightyellow",
        command=set_default)
button2.pack()

root.mainloop()

[↑ 目次へ]