機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【初心者】【tkinter】ボタンを押すと入力項が出現する機能を作る

【Part4】python3-tkinterの使い方

 

1.はじめに

前回はボタンを押すと入力項に書かれた文を取得し、メッセージボックスで表示する機能を作りました。

f:id:stjun:20190512175024j:plain

↓前回の記事

www.stjun.com

今回はボタンを押すと,入力項に書かれた数字の数だけ新たな入力項を出現させる機能を作ってみます。

 

2.コード

import tkinter as tk #tkinterの読み込み
import tkinter.messagebox as mb
#ウインド(win)を作成
win=tk.Tk()
win.title("Hello world")
win.geometry("500x300") #ウインドの大きさを200×300に設定
#入力項(変数名:Entry_box)の作成
Entry_box=tk.Entry(width=40,foreground='#000000', background='#FFFFFF')
Entry_box.insert(tk.END,"何か入力してください")
Entry_box.place(x=50,y=10)
#ボタンを押したときに新しい入力項を作成する関数
def display_action():
    text=Entry_box.get()
    for i in range(int(text)):
        Editbox=tk.Entry(width=40)
        Editbox.place(x=50,y=30*(i+0.3)+30)
#ボタン(変数名:Button)の作成
Button=tk.Button(win,width=5,background="#99CCFF",text="ボタン",command=display_action)
Button.place(x=300,y=5)
#ウインドを動かす
win.mainloop()

例えば、入力項に5を代入して水色のボタンを押すと入力項が5つ増えます。

f:id:stjun:20190513230856j:plain

f:id:stjun:20190513230907j:plain

 

3. 説明

今回、前記事から変わった部分は以下の関数の中身だけです。

#ボタンを押したときに新しい入力項を作成する関数
def display_action():
    text=Entry_box.get()
    for i in range(int(text)):
        Editbox=tk.Entry(width=40)
        Editbox.place(x=50,y=30*(i+0.3)+30

text=Entry_box.get() で入力項に代入された数字を読み取ります。これは前記事と同じで,get()関数で入力項(Entry_box)に書かれた文字を取得しています。

 

for i in range(int(text))はint(text)の回数だけ以下のコードを繰り返すという意味になります。textというのは先ほど入力項に書かれた数字(画像だと5)です。しかしfor i in range(text)と書くとエラーになります。これは入力項に書かれた5は数字ではなく文字として分類されているからです。そのため文字を数字に変換するために、int(text)として整数に変換しています。

またrange()を忘れて、for i in int(text)と書くとエラーになるので忘れずrange()を書きましょう。

 

Editbox=tk.Entry(width=40)
Editbox.place(x=50,y=30*(i+0.3)+30)

幅40の入力項をy方向にずらしながら生成するコードになります。

y=30*(i+0.3)+30ですが、iというのはfor文のループの回数です。そのため1回目はy=30*(0+0.3)+30=39、2回目のループではy=30*(1+0.3)+30=69と30ずつyがずれていくため等間隔に入力項が作成されます。

 

おすすめ書籍 

tkinterは参考書が非常に少ないです、というより日本語の参考書はほぼ皆無です。個人的には以下がお勧めです。

私が勉強していた時は以下のような参考書がなくネットで調べながら苦労してtkinterを覚えましたが、もし当時こんな書籍があったらもっと楽に学べたのに...と思うくらい基本的内容について丁寧に書かれています。

Amazonの月額読み放題サービス「Kindle unlimited」でも読めます。

初回30日間は無料、退会も簡単なので試しに無料体験して読んでみてもよさそうです。

 

4.まとめ

今回はボタンを押すと入力項に書かれた数字を読み取り、その数字の数だけ新たな入力項を作成する機能を作りました。

これを利用すれば、例えばToDoリストを追加する動作などに使えそうですね。

次回は一回で何個も入力項を作るのではなく、ボタンを押すたびに1個づつ新しい入力項が出現する機能を作ってみたいと思います。

 ↓次の記事

www.stjun.com