Skip to content
Twitter
edu-IT Practical Labo
【名古屋】
edu-IT Practical Laboedu-IT Practical Labo
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact
 
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact

Pythonで「標準体重計算」と「電卓」のプログラムを書いてみよう~文字列と数値の扱い/入力処理/GUIツール(tkinter)の基礎を確認

You are here:
  1. Home
  2. edu-IT
  3. Pytho…
4月172021
edu-ITIT knowledgePython

業務でアプリケーション開発をする方ではなくても、Pythonで編集したプログラムを使ってツールを作ってみたり、Excelと連携してデータを可視化し、調査・分析などの業務に取り入れてみたいとお考えの方もいらっしゃるのではないでしょうか。

今回は、Pythonでの文字列と数値の扱い/入力処理/GUIツール(tkinter)を扱います。Pythonの基礎知識を学び、日頃からコード書いていくことでPythonに慣れていきましょう。
 


PCにPythonを使うための設定をされていない方は、以下の記事も参考にしてみてください。
【参考記事】:VSCodeにPythonの初期設定をする方法

 

Contents

  • 1 Pythonで標準体重計算プログラムを作成
  • 2 GUIを構築・操作するための標準ライブラリ「tkinter」を利用
  • 3 GUIプログラム処理を作成する流れ
  • 4 tkinterライブラリを利用した電卓のコードを確認

Pythonで標準体重計算プログラムを作成

 
まず、身長(cm)とbmiの基準値を計算式に当てはめて、標準体重を求めるプログラムを作成します。

問題: 標準体重計算プログラムを作成する

 次の計算式を使って、bmiとキーボード入力された「身長(cm)」 から標準体重を求めるプログラムを作成してみましょう。
	標準体重 = bmi × 身長(m)2

*bmi とは「Body Mass Index: 体格指数」の略です。今回は基準を22とする。

bmi_calculation.py

height = 160
bmi = 22
cal_weight = bmi * (height / 100) **2
print('身長:'+str(height)+ 'cm  ⇒ ', end='')
print('標準体重:'+str(cal_weight)+'kg')

身長(cm)をキーボード入力する形で、問題の解答を考えてみましょう

 
キーボードから値を入力するには?

 

>>> str = input(“何か入力してください:”) [Enter]
何か入力してください: 名古屋
>>> str [Enter]
‘名古屋’

 

 input() 関数の戻り値は文字列なので、小数を含む数値として扱うには、float()関数を使用して数値に変換する必要があります。

 

【 参考 】:str() 関数 - 数値を文字列に変換



 

次に例を示します

>>> s = str(2021)  [Enter]
>>> print(s)  [Enter]
2021
>>> type(s)  [Enter]
<class ‘str’>     ●-クラスはstring型

 
身長をキーボードから入力して標準体重を求めるプログラム

height = float(input("身長を入力してください:"))
bmi = 22

std_weight = bmi * (height / 100) **2
print('身長:'+str(height)+ 'cm  ⇒ ', end='')
print('標準体重:'+str(std_weight)+'kg')

 

● 実行結果

$python bmi_calclation.py  [Enter]
身長(cm)を入力してください:(キーボード入力:160) [Enter]
身長:160.0cm ⇒ 標準体重:56.32 kg

 

GUIを構築・操作するための標準ライブラリ「tkinter」を利用

 

今度はPythonからGUIを構築・操作するための標準ライブラリである「tkinter」を利用して簡易電卓を作成していきましょう。

 

 

まず、tkinterの公式ドキュメント(https://docs.python.org/ja/3/library/tkinter.html)に記載のある
「簡単なHello Worldプログラム」を実行してみましょう。

 


import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = tk.Tk()
app = Application(master=root)
app.mainloop()


と表示されれば成功です。

 

GUIプログラム処理を作成する流れ

 
次にtkinter でGUIプログラム処理を作成する流れを確認していきましょう。

① ウィンドウを作成する    window = tkinter.Tk()
② ウィンドウの中身を設定する tkinter.Label , tkinter.Entry , tkinter.Button など
③ ウィンドウを表示する    window.mainloop()

 

下のような例を考えてみましょう

 

tkinter_practice.py


import tkinter as tk

root = tk.Tk()
root.title(u"tkinterの基本")
root.geometry("400x150")

#ラベル
Static = tk.Label(text=u'文字列を入力してください:')
Static.pack()

#エントリー
EditBox = tk.Entry(width=25)
EditBox.insert(tk.END,"入力する文字列")
EditBox.pack()

#エントリーの中身を削除
EditBox.delete(0, tk.END)

#   
# 「Entry内の文字を消す」ボタンが押されるとここが呼び出される
#
def delEntryValue(event):
  #エントリーの中身を削除
  EditBox.delete(0, tk.END)

#ボタン押下時にエントリーの文字を消すようバインドする
Button = tk.Button(text=u'Entry内の文字を消す', width=30)
Button.bind("<Button-1>",delEntryValue) 
#左クリック(<Button-1>)されると,delEntryValue関数を呼び出すようにバインド
Button.pack()

root.mainloop()

 

tkinterライブラリを利用した電卓のコードを確認

では実際に、tkinterライブラリを利用した電卓のコードを見て、実行確認してみましょう。

*計算には、「eval関数」を使用します。

● eval 関数の使い方

>>> cal = eval(“2+4+6”)  [Enter]
>>>cal
12
>>> cal = eval(“2 + 4 * 6 / 2”)  [Enter]
14.0

# 変数を利用
>>> a = 5  [Enter]
>>> print( eval( ‘cal * a’) )   [Enter]
70.0

 

● tkinterを利用して「電卓」のコードを記述

tkinter_calculation.py

import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master.geometry()
        self.master.title('電卓')
        self.entry = tk.Entry(self.master)
        self.create_widgets()

    def input(self, action):
        self.entry.insert(tk.END, action)

    def all_clear(self):
        self.entry.delete(0, tk.END)

    def one_clear(self):
        txt = self.entry.get()
        self.entry.delete(0, tk.END)
        self.entry.insert(0, txt[:-1])

    def equals(self):
        self.value = eval(self.entry.get().replace('÷', '/').replace('x', '*'))
        self.entry.delete(0, tk.END)
        self.entry.insert(0, self.value)

    def create_widgets(self):
        self.entry.grid(row=0, column=0, columnspan=5, pady=3)
        self.entry.focus_set()

        tk.Button(self.master, text='7', width=3,
                  command=lambda: self.input(7)).grid(row=1, column=0)
        tk.Button(self.master, text='8', width=3,
                  command=lambda: self.input(8)).grid(row=1, column=1)
        tk.Button(self.master, text='9', width=3,
                  command=lambda: self.input(9)).grid(row=1, column=2)
        tk.Button(self.master, text='4', width=3,
                  command=lambda: self.input(4)).grid(row=2, column=0)
        tk.Button(self.master, text='5', width=3,
                  command=lambda: self.input(5)).grid(row=2, column=1)
        tk.Button(self.master, text='6', width=3,
                  command=lambda: self.input(6)).grid(row=2, column=2)
        tk.Button(self.master, text='1', width=3,
                  command=lambda: self.input(1)).grid(row=3, column=0)
        tk.Button(self.master, text='2', width=3,
                  command=lambda: self.input(2)).grid(row=3, column=1)
        tk.Button(self.master, text='3', width=3,
                  command=lambda: self.input(3)).grid(row=3, column=2)
        tk.Button(self.master, text='0', width=3,
                  command=lambda: self.input(0)).grid(row=4, column=0)
        tk.Button(self.master, text='.', width=3,
                  command=lambda: self.input('.')).grid(row=4, column=1)
        tk.Button(self.master, text='÷', width=3,
                  command=lambda: self.input('÷')).grid(row=4, column=2)
        tk.Button(self.master, text='x', width=3,
                  command=lambda: self.input('x')).grid(row=1, column=3)
        tk.Button(self.master, text='-', width=3,
                  command=lambda: self.input('-')).grid(row=2, column=3)
        tk.Button(self.master, text='+', width=3,
                  command=lambda: self.input('+')).grid(row=3, column=3)
        tk.Button(self.master, text='%', width=3,
                  command=lambda: self.input('%')).grid(row=4, column=3)
        tk.Button(self.master, text='AC', width=3,
                  command=lambda: self.all_clear()).grid(row=1, column=4)
        tk.Button(self.master, text='C', width=3,
                  command=lambda: self.one_clear()).grid(row=2, column=4)
        tk.Button(self.master, text='=', width=3,
                  command=self.equals).grid(row=4, column=4)
root = tk.Tk()
app = Application(master=root)
app.mainloop()

 

業務でPythonを使ってツールを作ったり、自動化処理を記述したりする機会がある方もいらっしゃると思います。自身のPCにVSCodeをインストールして設定をすれば、簡単に動かすことができるので、この機会にPythonに挑戦してみようかなと思っていただければ幸いです。

以上となります。

 

参考文献:
・大津真『基礎Python』インプレス(2016年)

Category: edu-IT, IT knowledge, PythonBy semi3del2021年4月17日Leave a comment
Share this post
Share with Google+Share with FacebookShare with Twitter

Author: semi3del

Post navigation

PreviousPrevious post:Pythonで学び直す数学【集合・確率編】~例題を解きながら集合とリストの使い方を理解しようNextNext post:VSCodeにSQLiteを導入~例題を解きながらSQL基本操作を覚えよう

Related Posts

CodeSandboxでReactのTodoリストを作成してみよう
2025年3月31日
Pythonライブラリ「Scrapy」でスクレイピング~Webサイトからデータを取得してみよう
2025年1月27日
はじめてのLambda~関数のサンプルを作ってみよう
2024年9月18日
GitHub Actions入門~Cloud9でGitHub ActionsのHelloWorldを実行してみよう
2023年11月28日
Web APIをPythonで使ってみる~Fast APIの基礎
2023年9月25日
FigmaからReactのコード生成するプラグインを使ってUIコンポーネントを作成してみよう
2023年7月4日

コメントを残す コメントをキャンセル

Your email address will not be published. Required fields are marked *

Post comment

最近の投稿
  • CodeSandboxでReactのTodoリストを作成してみよう
  • Pythonライブラリ「Scrapy」でスクレイピング~Webサイトからデータを取得してみよう
  • CodeSandboxでReactのフォーム部品を操作してみよう
  • はじめてのLambda~関数のサンプルを作ってみよう
  • Canva入門~テンプレートでプレゼン資料を作成してみよう
アーカイブ
  • 2025年3月
  • 2025年1月
  • 2024年11月
  • 2024年9月
  • 2024年8月
  • 2024年6月
  • 2024年4月
  • 2024年1月
  • 2023年11月
  • 2023年9月
  • 2023年7月
  • 2023年5月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年6月
  • 2022年5月
  • 2022年3月
  • 2022年1月
  • 2021年11月
  • 2021年9月
  • 2021年7月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年11月
  • 2020年9月
  • 2020年6月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2017年7月