python3 Tips

Step6:そこそこ入力できるようにしてみる

入力欄をつくる Entry Widget

 → 

今回はウィンドウ内にエントリー欄を配置して、入力された値をラベルに表示するというプログラムを作ります。

あ、あと、ウィンドウの上にタイトルも表示してみましょう。

#!/usr/bin/env python
# coding=utf-8

from tkinter import *

class Step6(object):
    def __init__(self):
        self.root = Tk()
        self.root.title('Step6 Entry Test')

        self.frm_Main = Frame(self.root)
        self.frm_Main.pack()

        self.lbl_Entry = Label(self.frm_Main)
        self.lbl_Entry.configure(text = '何か入力してください')
        self.lbl_Entry.pack()

        self.etr_Entry = Entry(self.frm_Main)
        self.etr_Entry.pack()

        self.btn_Run = Button(self.frm_Main)
        self.btn_Run.configure(text = '実行', command = self.getEntry)
        self.btn_Run.pack()

        self.root.mainloop()

    def getEntry(self):
        strS = self.etr_Entry.get()
        self.lbl_Entry.configure(text = strS)

if __name__ == '__main__':
    app = Step6()
			

何らかの情報の受け取りにはEntry()Widgetを利用します。ここに入力された値を得るには、 Entry widgetのget()メソッドを使用します。上の例ではself.etr_Entry.get()(28行目)という形で受け取って、 それをstrSに代入しています。それから、self.lbl_Entry.configure(text = strS)(29行目)でラベルに表示、といった具合です。


ウィンドウにタイトルを入れる

写真のとり方がまずかったので、分かりにくいですが、root( Tk() に .title でウィンドウにタイトルを表示させることができます。 今までは tk と表示されていましたが、self.root.title('Step6 Entry Test') という行を追加することによって Step6 Entry Test と表示されるようになりました。めでたしめでたし。


実は…。

上記の例ではEntryに入力された値を直接、Labelのconfigureで指定して、表示しました。しかし、実は、あまりこの方法は上品ではなく、 実際はvariable classのStringVarを利用してTkinter変数を操作します。StringVarをつくるには、

 var = StringVar()

この値を得るには、

 var.get()

varに値を設定するときは、

 var.set()

で指定します。

先の例では、ラベルに変化を与えるのに self.lbl_Entry.configure(text = strS) としましたが、StringVarを利用する際は、 textvariable(テキスト変数)を用いて、

 configure(textvariable = var)

と設定します。

これらを踏まえて作りなおし、getEntry()メソッドにも少し手を加えたものがコチラ(14,15,17行目に注目)↓

#!/usr/bin/env python
# coding=utf-8

from tkinter import *

class Step6(object):
    def __init__(self):
        self.root = Tk()
        self.root.title('Step6 Entry Test')

        self.frm_Main = Frame(self.root)
        self.frm_Main.pack()

        self.bff_Label = StringVar()
        self.bff_Label.set('何か入力してください')
        self.lbl_Entry = Label(self.frm_Main)
        self.lbl_Entry.configure(textvariable = self.bff_Label)
        self.lbl_Entry.pack()

        self.etr_Entry = Entry(self.frm_Main)
        self.etr_Entry.pack()

        self.btn_Run = Button(self.frm_Main)
        self.btn_Run.configure(text = '実行', command = self.getEntry)
        self.btn_Run.pack()

        self.root.mainloop()

    def getEntry(self):
        if self.etr_Entry.get():
            self.bff_Label.set('{yourWord}が入力されました。'.format(
                                                            yourWord = self.etr_Entry.get()
                                                            ))
        else:
            self.bff_Label.set('何も入力されていません')

if __name__ == '__main__':
    app = Step6()
			

めでたしめでたし。