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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

Q&A

解決済

2回答

1948閲覧

Python,tkineterでUndefined variableを修正したい

tan.sansui

総合スコア2

Tkinter

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

0グッド

0クリップ

投稿2021/04/06 06:34

平素よりお世話になっております。初歩的な質問かもしれず申し訳ありません。
pythonのtkinterを使っているのですが、どうしても
codeの中のcが、Undefined variable 'c'になってしまいます。
if文で定義しているはずなんですが。
if文で定義したものを違うif文では使えないのでしょうか?
どうやったら解決できるかご教授いただけたらと思います。
以下codeを添付しますのでよろしくお願いします。

import tkinter as tk
root = tk.Tk()
root.title()

def sum():

a=textBox5.get() b=textBox6.get() c=int(a+b) if a== str("y"): a=1 else : a=0 if b== str("y"): b=1 else : b=0

def suma():

if c<=1: canvas1 = tk.Canvas(width=300,height=100,bg="blue") canvas1.grid(row = 4, column = 30, sticky = "wens", padx = 10, pady = 10) else : canvas1 = tk.Canvas(width=300,height=100,bg="green") canvas1.grid(row = 4, column = 30, sticky = "wens", padx = 10, pady = 10)

textBox5= tk.Entry(root)
textBox5.grid(text=0,row = 1, column = 30, sticky = "wens", padx = 10, pady = 10)
textBox6= tk.Entry(root)
textBox6.grid(row = 2, column = 30, sticky = "wens", padx = 10, pady = 10)

calcButton = tk.Button(root, text=u'計算',command=lambda:[sum(), suma()])

calcButton.grid(row = 1, column = 0, padx = 10, pady = 10)

root.mainloop()

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

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

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

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

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

TakaiY

2021/04/06 06:40

ソースコードのインデントが無いとまったく読めないので、ソースコードの最初に 「```python 」を、終りに「```」を入れて読めるようにしてください。
y_waiwai

2021/04/06 07:22

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
tan.sansui

2021/04/09 07:54

インデントすみません。 そのまま貼ってしまいました。
guest

回答2

0

ベストアンサー

問題点は、y_waiwaiさんが書かれている通りです。

解決するためには、

cを外部変数にしておき、さらに関数sumの定義の中でcをglobal宣言することで、関数sumaの中からcを参照できるようになります。
以下を参考にしてください。

python

1c = 0 #初期値は何でも良いので関数の外でcを定義する。 2def sum(): 3 global c # 変数cをglobal宣言する。 4 a=textBox5.get() 5 b=textBox6.get() 6 if a== str("y"): 7 a=1 8 else : 9 a=0 10 if b== str("y"): 11 b=1 12 else : 13 b=0 14 c=a+b

あと、sumは組み込み関数なので使わない方が良いとか、aを使ってaに代入するのはバグの原因になりやすいとか、気をつけてください。

投稿2021/04/06 07:32

編集2021/04/06 07:34
ppaul

総合スコア24670

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

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

0

ちとコードが読めないのでアレですが、
関数の中で定義される変数は、ローカル変数といって、その関数の中だけでしか有効ではありません
ってことで、
関数 sumaの中で、cという変数を見てますが、これがこの関数内では定義されてない、ってことでエラーが出てますね

投稿2021/04/06 07:24

y_waiwai

総合スコア88042

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

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

tan.sansui

2021/04/09 07:56

code読めずすみません 対応いただいてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問