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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Tkinter

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

Python

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

Q&A

解決済

2回答

783閲覧

Python 計算ツールが作動しない。ネームエラー

Mayaa

総合スコア1

Tkinter

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

Python

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

0グッド

0クリップ

投稿2021/05/01 09:03

##前回も同じ質問をしましたが、コードの記載場所のミスを修正したところ、「更新ボタン」が機能しなかったため、再度新たに質問をさせて頂きます。

##<目的>
##外部テキストを使用して、計算機能ツールを作動させたい。

##<現状>
#cm-->inchesは作動します。
#inches --->cmはエラーが表示されてしまします。

#Python

発生している問題・エラーメッセージ

#cmからインチへの変換は出来るのに、インチからCmを試すと以下のエラーが表示されてしまいます。
#<エラーメッセージ>
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Maya\AppData\Local\Programs\Python\Python39\lib\tkinter_init_.py", line 1892, in call
return self.func(*args)
File "F:\NewStage3.py", line 44, in conversion
num = inchestocm(float(txtInput.get()))
File "F:\NewStage3.py", line 17, in inchestocm
inches /= INCHES_TO_CM
NameError: name 'INCHES_TO_CM' is not defined

pythonに挿入用のテキストファイルのコンテンツ
cm_to_inches, 0.394

コード ## Date created: 30 April 2021 ## Date last changed: 29 April 2021 ## This Program does to convert cm to inches, and inches to cm. ## Input:None, Output:None CM_TO_INCHES = 0 #Crearing global valuable # Import module from tkinter import * def cmtoinches(cm): cm *= CM_TO_INCHES return round(cm, 2) def inchestocm(inches): inches /= INCHES_TO_CM return round(inches, 2) def loadConversion(): global CM_TO_INCHES f = open("operations.txt", "r") L1 = f.readline() val=L1.split(",") CM_TO_INCHES = float(val[1]) #Create object loadConversion() root = Tk() root.title("convert length") root.configure(background="#EEEFFF") theLabel = Label(root, text="This is a cm/inches conversion, please select the unit, and add length you wish to convert to") # Adjust size # root.geometry( "200x200" ) # Change the label text def conversion(): num = 0 if (clicked.get() == "cm"): num = cmtoinches(float(txtInput.get())) lblOutput.config( text = str(num) + " inches" ) else: num = inchestocm(float(txtInput.get())) lblOutput.config( text = str(num) + " cm" ) def changeInput(value): if (clicked.get() == "cm"): lblInput.config( text = "Convert to inches" ) else: lblInput.config( text = "Convert to cm" ) # def conversion(): # if clicked # Dropdown menu options options = [ "cm", "inches" ] # datatype of menu text clicked = StringVar() # initial menu text clicked.set( options[0] ) lblValue = Label(root, text="Insert a value").pack() txtInput =StringVar() e1=Entry(root, textvariable=txtInput).pack() lblInput = Label( root , text="inches" ) lblInput.pack() lblSelect = Label(root, text="Select unit to be converted into").pack() # Create Dropdown menu drop = OptionMenu( root , clicked , *options, command=changeInput) drop.pack() # Create button, it will change label text btnConvert = Button(root , text = "convert" , command = conversion ).pack() btnExit =Button(root, text="click to exit", command=root.destroy).pack() # Create Label lblOutput = Label( root , text = "", fg="#0000FF" ) lblOutput.pack() # Execute tkinter root.mainloop()

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

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

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

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

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

1T2R3M4

2021/05/01 09:14

name 'INCHES_TO_CM' is not defined に対して試みたことを追記していただけませんか。
Mayaa

2021/05/01 13:19

def INCEHC_TO_CMと入力してみたのですが、変化ありませんでした。
guest

回答2

0

ベストアンサー

以下の関数で、変換のための定数を設定していますよね。この中でCM_TO_INCHESは設定していますが、エラーに出てくるINCHES_TO_CMは設定していません。

python

1def loadConversion(): 2 global CM_TO_INCHES 3 f = open("operations.txt", "r") 4 L1 = f.readline() 5 val=L1.split(",") 6 CM_TO_INCHES = float(val[1])

この関数でINCHES_TO_CMも設定したり、golbal変数の初期化をしたり、他にもCM_TO_INCHES では行なわれていることをいろいろ注意しながら直さないといけません。


インチをセンチメートルに変換する処理についてなおさなきゃならないところがいくつもあります。
課題のようですから書いてしまわず、ヒント出しましょう。
ただし、これだけでうまくいくかどうかはわかりませんけどね。

まずはこのあたりでグローバル変数INCHES_TO_CMの設定が必要です。初期値は0でいいでしょう。

python

1CM_TO_INCHES = 0 #Crearing global valuable

次に、初期化が必要です。 以下の場所で「operations.txt」から読みましょう。
現状は1行目にCM_TO_INCHESが入てちるようですから、2行目にINCHES_TO_CMの値を書いておくことにしましょう。
すると下の処理に2行目を読む処理を追加すればいいでしょう。 global宣言を追加して、下の3行を繰り返せばいいはず。

python

1def loadConversion(): 2 global CM_TO_INCHES 3 f = open("operations.txt", "r") 4 L1 = f.readline() 5 val=L1.split(",") 6 CM_TO_INCHES = float(val[1])

とりあえず、この2つで動くようになるんじゃないかなぁ。

投稿2021/05/01 14:23

編集2021/05/02 10:28
TakaiY

総合スコア12765

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

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

Mayaa

2021/05/01 16:00

ありがとうございます。 Python初心者で、このコードも先生に聞きながら作成をしたため、お恥ずかしながらどのように訂正をすればいいか詳細にお教え頂くことは可能でしょうか? 祝日で先生にも聞けず、このコードの提出締切が迫っており本当に困っております。 どうぞ、よろしくお願い致します。
guest

0

NameError: name 'INCHES_TO_CM' is not defined

'INCHES_TO_CM' が定義されてない、とおっしゃってますので、
そこらへんどーにかしましょう

投稿2021/05/01 11:46

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問