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()
めでたしめでたし。