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

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

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

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

Q&A

解決済

2回答

879閲覧

global変数が"no attribute"エラーになる

gokurakutombo

総合スコア0

Python

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

0グッド

0クリップ

投稿2021/10/14 02:58

編集2021/10/14 06:50

前提・実現したいこと

GUI画面からデータを入力し、エクセルファイルを検索結果を返す
GUI画面の入力データをグローバル変数WORDに保存し、pw_kensaku2で検索キーとして使用したいのですが
wordが見つからないというエラーメッセージなってしまいます。グローバル変数の取扱が悪いのだと思いますが、原因がわかりません。

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

<<検索終了>> Traceback (most recent call last): File "/home/kimura/ドキュメント/python/pwsearch/pw_kensaku.py", line 46, in <module> h.pw_kn() File "/home/kimura/ドキュメント/python/pwsearch/pw_kensaku.py", line 18, in pw_kn data = gui_gamen4.pw_gamen.word AttributeError: 'function' object has no attribute 'word'エラーメッセージ

該当のソースコード

言語名

python

ソースコード
<画面作成>

python

1def pw_gamen(): 2 3 import tkinter as tk 4 root = tk.Tk() 5 root.geometry("300x100") 6 7 entry = tk.Entry() 8 entry.place(x=20, y=30) 9 10 button = tk.Button(text="OK") 11 button.place(x=150, y=26) 12 13 def click(): 14 global word 15 word = entry.get() 16 entry.delete(0, tk.END) 17 label = tk.Label(text=word) 18 label.place(x=20, y=50) 19 20 return word 21 button["command"] = click #関数と関連付ける 22 print(pw_gamen.word) 23 root.mainloop() 24 25if __name__ == '__main__': 26 pw_gamen()

<エクセル編集>

python

1global word 2import openpyxl 3import gui_gamen4 4class Hoge: 5 def pw_kn(self): 6 wb = openpyxl.load_workbook('********.xlsx',data_only=True) 7 lastrow = wb['*****'].max_row 8 data = gui_gamen4.pw_gamen.word 9 print(data) 10 myRanges = wb['*****']['A2:A' + str(lastrow)] 11 for rows in myRanges: 12 for cell in rows: 13 if data in cell.value: 14 a = cell.offset(0,1).value 15 b = cell.offset(0,2).value 16 c = cell.value 17 print(c," ",a," ",b) 18 19print("<<検索終了>>") 20if __name__ == '__main__': 21 h= Hoge() 22 h.pw_kn() 23 pw_gamen()

試したこと

個々のモジュールでは動作確認が取れています。
検索モジュールはinputコマンドで値を入力し確認しました。

補足情報(FW/ツールのバージョンなど)

Python 3.6.9
ここにより詳細な情報を記載してください。
python初心者です。とんでもない勘違いをしてるかもしれませんがよろしくお願いします。

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

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

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

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

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

1T2R3M4

2021/10/14 03:03

pythonならばインデントをつけないと。
jbpb0

2021/10/14 03:16

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
guest

回答2

0

自己解決

画面作成のモジュールでmain.loopから抜けていないのが原因でした。
モジュールに
button2 = tk.Button(text = "Exit", command = lambda: root.destroy())を
追加して検索文字を入力後、exitボタンを押してループから抜けるように修正しました。
これからはOKボタンだけで処理ができるように検討します。

投稿2021/10/18 05:10

gokurakutombo

総合スコア0

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

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

0

python

1# 検索する文字を入力する 2data = gui_gamen4.pw_gamen.word 3print(data)

を、

python

1# 検索する文字を入力する 2data = gui_gamen4.word 3print(data)

に修正しましょう。

投稿2021/10/14 03:33

ppaul

総合スコア24670

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

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

gokurakutombo

2021/10/14 06:52

修正し、実行してみましたが、同じ結果でした。 AttributeError: 'function' object has no attribute 'word'
ppaul

2021/10/14 07:29

print(gui_gamen4)を実行すると何が表示されますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問