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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

Q&A

解決済

2回答

2261閲覧

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

tono_1812

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

0グッド

0クリップ

投稿2019/05/11 17:26

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

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

python

1#main.py 2from tkinter import * 3import tkinter 4import crawl 5 6 7if __name__ == "__main__": 8 root = Tk() 9 10def button_sub(): 11 crawl.menu() 12 13root.configure(width = 385, height=400) 14button_sub = tkinter.Button(text=u"Menu!",width=52,command=button_sub) 15button_sub.place(x=5, y=30) 16 17root.mainloop()

python

1#crawl.py 2from tkinter import * 3import tkinter 4import os 5from urllib import parse 6 7def button_get(): 8 base = os.path.dirname(os.path.abspath(__file__)) 9 keyword = EditBox_name.get() 10 urlKeyword = parse.quote(keyword) 11 number = EditBox_number.get() 12 number = int(number) 13 print(keyword) 14 print(number) 15 16def menu(): 17 crawler = Toplevel() 18 crawler.geometry("385x400") 19 label_name = tkinter.Label(crawler, text=u"Name") 20 label_name.place(x=5, y=60) 21 EditBox_name = tkinter.Entry(crawler, width=30) 22 EditBox_name.insert(tkinter.END,"banana") 23 EditBox_name.place(x=5, y=90) 24 25 label_number = tkinter.Label(crawler,text=u"Number") 26 label_number.place(x=5, y=120) 27 EditBox_number = tkinter.Entry(crawler,width=30) 28 EditBox_number.insert(tkinter.END,"101") 29 EditBox_number.place(x=5, y=150) 30 31 global button_get 32 button_get = tkinter.Button(crawler,text=u"Run",background="#fffb3f",width=52,command=button_get) 33 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

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

Python

1# crawl.py 2 3EditBox_name = None 4EditBox_number = None 5 6def button_get(): 7 global EditBox_name, EditBox_number 8 # 略 9 10def menu(): 11 global EditBox_name, EditBox_number 12 # 略

投稿2019/05/11 21:16

編集2019/05/12 02:20
can110

総合スコア38260

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

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

tono_1812

2019/05/12 02:19 編集

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

2019/05/12 02:22

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

0

こんばんは。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter as tk 2 3 4class Application(tk.Frame): 5 # entry Widgetの値を格納するための変数 6 EditBoxName = None 7 # entry Widgetの値を格納するための変数 8 EditBoxNumber = None 9 10 # entry Widgetにて、入力された値を取得する関数 11 def getButton(self): 12 keyword = self.EditBoxName.get() 13 number = self.EditBoxNumber.get() 14 print(keyword) 15 print(number) 16 17 # メニューの内容を表示する関数 18 def menu(self): 19 # メインWindowに紐づく、サブWindowを作成する。 20 # Toplevelについて : https://kuroro.blog/python/kEE4RwgYN45V0lM92SDM/ 21 crawler = tk.Toplevel() 22 # サブWindowの画面サイズを設定する。 23 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 24 crawler.geometry("385x400") 25 26 # サブWindowを親要素として、label Widgetを作成する。 27 # text : テキスト情報 28 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 29 labelName = tk.Label(crawler, text="Name") 30 # サブWindowを親要素として、label Widgetをどのように配置するのか? 31 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 32 labelName.place(x=5, y=60) 33 34 # サブWindowを親要素として、entry Widgetを作成する。 35 # width : 幅の設定 36 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 37 self.EditBoxName = tk.Entry(crawler, width=30) 38 # entry Widget(self.EditBoxName)の末尾へ値を格納する。 39 # tk.END : 末尾 40 self.EditBoxName.insert(tk.END, "banana") 41 # サブWindowを親要素として、entry Widgetをどのように配置するのか? 42 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 43 self.EditBoxName.place(x=5, y=90) 44 45 # サブWindowを親要素として、label Widgetを作成する。 46 # text : テキスト情報 47 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 48 labelNumber = tk.Label(crawler, text="Number") 49 # サブWindowを親要素として、label Widgetをどのように配置するのか? 50 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 51 labelNumber.place(x=5, y=120) 52 53 # サブWindowを親要素として、entry Widgetを作成する。 54 # width : 幅の設定 55 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 56 self.EditBoxNumber = tk.Entry(crawler, width=30) 57 # entry Widget(self.EditBoxNumber)の末尾へ値を格納する。 58 # tk.END : 末尾 59 self.EditBoxNumber.insert(tk.END, "101") 60 # サブWindowを親要素として、entry Widgetをどのように配置するのか? 61 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 62 self.EditBoxNumber.place(x=5, y=150) 63 64 # サブWindowを親要素として、button Widgetを作成する。 65 # text : テキスト情報 66 # background : 背景色 67 # 色の設定を変更する場合 : http://www.tcl.tk/man/tcl/TkCmd/colors.htm 68 # width : 幅の設定 69 # command : ボタンをクリックした時に、実行する関数の設定。self.getButtonとする。 70 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 71 button = tk.Button( 72 crawler, text="Run", background="#fffb3f", width=52, command=self.getButton) 73 # サブWindowを親要素として、button Widgetをどのように配置するのか? 74 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 75 button.place(x=5, y=210) 76 77 # 新たなメニューを開く関数 78 def subButton(self): 79 self.menu() 80 81 def __init__(self, master=None): 82 # Windowの初期設定を行う。 83 super().__init__(master) 84 85 # Windowを親要素として、button Widgetを作成する。 86 # text : テキスト情報 87 # width : 幅の設定 88 # command : ボタンをクリックした時に、実行する関数の設定。self.subButtonとする。 89 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 90 button = tk.Button(self.master, text="Menu!", 91 width=52, command=self.subButton) 92 # Windowを親要素として、button Widgetをどのように配置するのか? 93 # placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 94 button.place(x=5, y=30) 95 96 97if __name__ == "__main__": 98 # Windowを作成する。 99 root = tk.Tk() 100 # Windowの幅、高さを設定する。 101 root.configure(width=385, height=400) 102 103 app = Application(master=root) 104 # Windowをループさせて、継続的にWindow表示させる。 105 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 106 app.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/13 11:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問