質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

741閲覧

tkinterで計算結果が表示されるが、答えが間違っている

town

総合スコア6

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/06 02:54

環境 
Windows10
python
anaconda

tkinterで計算させる簡易的なプログラムを作っています。
作っては見たのですが、二つ目の計算の部分が実際に電卓をたたいて導いた回答とは違う回答になってしまいます。
変数番号が違うのでしょうか?
ご教授お願い致します。

import tkinter as tk # ボタンを押したときの処理 --- (*1) def calc_bmi(): # 計算 h = float(textHeight.get()) w = float(textWeight.get()) bmi = (1000* h) / (3.14*w) per = int(bmi) # 結果をラベルに表示 s = " 回転速度 s{0} ".format(per) labelResult['text'] = s # ウィンドウを作成 --- (*2) win = tk.Tk() win.title("送り・回転速度・計算") win.geometry("300x300") # 部品を作成 --- (*3) labelHeight = tk.Label(win, text=u'周速:') labelHeight.pack() textHeight = tk.Entry(win) textHeight.insert(tk.END, '200') textHeight.pack() labelWeight = tk.Label(win, text=u'刃物径:') labelWeight.pack() textWeight = tk.Entry(win) textWeight.insert(tk.END, '10') textWeight.pack() labelResult = tk.Label(win, text=u'---') labelResult.pack() calcButton = tk.Button(win, text=u'計算') calcButton["command"] = calc_bmi calcButton.pack() # ウィンドウを動かすwin.mainloop() #ここから自作プログラム def calc_gg(): # 計算 f = float(textHeight1.get()) z = float(textWeight1.get()) n = float(textWeight1.get()) fk = f * z * n gg = int(fk) # 結果をラベルに表示 t = " 送り速度 F{0} ".format(gg) labelResult1['text'] = t #部品 labelWeight1 = tk.Label(win, text=u'1刃当たりの送り:') labelWeight1.pack() textHeight1 = tk.Entry(win) textHeight1.insert(tk.END, '0.1') textHeight1.pack() labelWeight1 = tk.Label(win, text=u'刃数:') labelWeight1.pack() textHeight1 = tk.Entry(win) textHeight1.insert(tk.END, '2') textHeight1.pack() labelWeight1 = tk.Label(win, text=u'回転数:') labelWeight1.pack() textHeight1 = tk.Entry(win) textHeight1.insert(tk.END, '5000') textHeight1.pack() #計算結果 labelResult1 = tk.Label(win, text=u'---') labelResult1.pack() calcButton1 = tk.Button(win, text=u'計算') calcButton1["command"] = calc_gg calcButton1.pack() # ウィンドウを動かす win.mainloop()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

magichan

2020/05/06 03:42

二つ目の計算 は具体的にどのような式で導かれるのでしょうか? [1刃当たりの送り] x [回転数] x [回転数] ですか?
town

2020/05/06 04:08

2つ目は、1刃当たりの送り×刃の数×回転数です!
guest

回答1

0

ベストアンサー

変数番号が違うのでしょうか?

はいそのとおりです。
間違いは多々ありまして

1.一刃あたりの送り刃数回転数を入力するEntry Boxが全てtextHeight1という変数を使用しているので、前者2つが上書きされる(結果 textHeight には回転数が入っております)
2.にも関わらず、f(一刃あたりの送り)をtextHeight1 から取得している
3.のこり2つのzntextWeight1から取得しようとしているが、そんな名前の変数はない

あたりを直す必要があります。

まず変数ですが、変数の名前と実際の機能と合っているようには見えませんので、その辺を直しつつ LabelやEntry Boxが格納されている変数名がユニークになるように(変数名を考えるのが大変なのであればとりあえずはLabel1, Label2のような連番の数値でもよいので)修正してみてください。


【一応変更例を追記】
とりあえず、ラベルが格納されている変数を label+数値 EntryBoxが格納されている変数を text+数値としてコードを修正したサンプルを載せておきますので参考にしてください。

Python

1import tkinter as tk 2 3# ボタンを押したときの処理 --- (*1) 4def calc_bmi(): 5 # 計算 6 h = float(textHeight.get()) 7 w = float(textWeight.get()) 8 bmi = (1000* h) / (3.14*w) 9 10 per = int(bmi) 11 # 結果をラベルに表示 12 s = " 回転速度 s: {0} ".format(per) 13 labelResult['text'] = s 14 15# ウィンドウを作成 --- (*2) 16win = tk.Tk() 17win.title("送り・回転速度・計算") 18win.geometry("300x400") 19 20# 部品を作成 --- (*3) 21labelHeight = tk.Label(win, text=u'周速:') 22labelHeight.pack() 23 24textHeight = tk.Entry(win) 25textHeight.insert(tk.END, '200') 26textHeight.pack() 27 28labelWeight = tk.Label(win, text=u'刃物径:') 29labelWeight.pack() 30 31textWeight = tk.Entry(win) 32textWeight.insert(tk.END, '10') 33textWeight.pack() 34 35labelResult = tk.Label(win, text=u'---') 36labelResult.pack() 37 38calcButton = tk.Button(win, text=u'計算') 39calcButton["command"] = calc_bmi 40calcButton.pack() 41 42# ウィンドウを動かすwin.mainloop() 43 44 45#ここから自作プログラム 46 47def calc_gg(): 48 # 計算 49 f = float(text1.get()) 50 z = float(text2.get()) 51 n = float(text3.get()) 52 53 fk = f * z * n 54 55 gg = int(fk) 56 # 結果をラベルに表示 57 t = " 送り速度 F: {0} ".format(gg) 58 labelResult1['text'] = t 59 60#部品 61label1 = tk.Label(win, text=u'1刃当たりの送り:') 62label1.pack() 63 64text1 = tk.Entry(win) 65text1.insert(tk.END, '0.1') 66text1.pack() 67 68label2 = tk.Label(win, text=u'刃数:') 69label2.pack() 70 71text2 = tk.Entry(win) 72text2.insert(tk.END, '2') 73text2.pack() 74 75label3 = tk.Label(win, text=u'回転数:') 76label3.pack() 77 78text3 = tk.Entry(win) 79text3.insert(tk.END, '5000') 80text3.pack() 81 82#計算結果 83 84labelResult1 = tk.Label(win, text=u'---') 85labelResult1.pack() 86 87calcButton1 = tk.Button(win, text=u'計算') 88calcButton1["command"] = calc_gg 89calcButton1.pack() 90 91# ウィンドウを動かす 92win.mainloop()

投稿2020/05/06 04:42

編集2020/05/06 04:54
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

town

2020/05/06 08:43

詳しくありがとうございます!!これを参考にしながら、復習したいと思います! ちなみになんですが、これだけ変数があると頭が混乱してしまうのですが、どう言ったことに注意しながら進めているのでしょうか? テキストエディタはVisualStudioを使っています。
magichan

2020/05/06 09:04

今回は変数名がユニークになること第一にした為、とりあえず変数名末に数値を振りましたが、基本的には「わかりやすい名前をつける」ことが一番かと思います。 変数名や関数名などは、言語毎・所属する団体毎・作者毎に様々な命名規則や命名ポリシーが存在する為ここで簡単に述べることはできませんが、例えば '刃数'のラベル格納する変数名を”label_for_blade_number”などにすることで、第3者がコードを見た際にこの変数が何のための変数なのかが一目でわかるようになりますので、作者本人も混乱なくコードを実装できるのではないかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問