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

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

ただいまの
回答率

88.76%

別の関数に入力が反映されません。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 549

tono_1812

score 9

別の関数に入力が反映されません。

何卒ご教授よろしくお願い致します。

#main.py
from tkinter import *
import tkinter
import crawl


if __name__ == "__main__":
    root = Tk()

def button_sub():
    crawl.menu()

root.configure(width = 385, height=400)
button_sub = tkinter.Button(text=u"Menu!",width=52,command=button_sub)
button_sub.place(x=5, y=30)

root.mainloop()
#crawl.py
from tkinter import *
import tkinter
import os
from urllib import parse

def button_get():
    base = os.path.dirname(os.path.abspath(__file__))
    keyword = EditBox_name.get()
    urlKeyword = parse.quote(keyword)
    number = EditBox_number.get()
    number = int(number)
    print(keyword)
    print(number)

def menu():
    crawler = Toplevel()
    crawler.geometry("385x400")
    label_name = tkinter.Label(crawler, text=u"Name")
    label_name.place(x=5, y=60)
    EditBox_name = tkinter.Entry(crawler, width=30)
    EditBox_name.insert(tkinter.END,"banana")
    EditBox_name.place(x=5, y=90)

    label_number = tkinter.Label(crawler,text=u"Number")
    label_number.place(x=5, y=120)
    EditBox_number = tkinter.Entry(crawler,width=30)
    EditBox_number.insert(tkinter.END,"101")
    EditBox_number.place(x=5, y=150)

    global button_get
    button_get = tkinter.Button(crawler,text=u"Run",background="#fffb3f",width=52,command=button_get)
    button_get.place(x=5, y=210)
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:\Users\onvcgkjcqh\Desktop\crawl.py", line 8, in button_get
    keyword = EditBox_name.get()
NameError: name 'EditBox_name' is not defined
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

EditBox_name変数などはmain関数内のローカル変数なのでbutton_get()では参照できません。
とりあえずの解決法としては以下のようにglobal変数にすればよいです。
ちなみにbutton_getglobal宣言していますが、これは不要です。関数名と変数名と同一にしていますが、関数を変数値で上書きしてしまうと意図しない動作をするため、別名にしたほうがよいです。

# crawl.py

EditBox_name = None
EditBox_number = None

def button_get():
    global EditBox_name, EditBox_number
    # 略

def menu():
    global EditBox_name, EditBox_number
    # 略

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/12 11:15 編集

    crawl.pyの全ての変数をglobal宣言することで、エラーが解消されました。
    当方環境では、buton_getをグローバル関数にしないと
    UnboundLocalError: local variable 'button_get' referenced before assignment
    になるようです。ほかの環境でもエラーが再現されるかやってみます。

    キャンセル

  • 2019/05/12 11:22

    今気づきましたが、関数名と変数名を同一にしているのですね。
    回答修正しました。これらはそれぞれ別の名前をつけたほうがよいです。

    キャンセル

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

  • ただいまの回答率 88.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る