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

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

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

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

Q&A

解決済

2回答

938閲覧

ファイルを開くボタンを押してもエラーが出てしまいます。

kuromaru200

総合スコア5

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

0グッド

0クリップ

投稿2020/10/04 14:34

参考書のコードを写したのですが、うまく動作しませんでした。
ファイルを開くボタンを押してもエラーが出てしまいます。
ご教示いただけますと幸いです。

以下、参考書のコードとエラーコードです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

import tkinter as tk
import tkinter.filedialog as fd
import PIL.Image
import PIL.ImageTk

def dispPhoto(path):
newImage = PIL.Image.open(path).resize((300,300))
imageData = PIL.ImageTk.PhotoImage(newImage)
imageLabel.configure(image = imageData)
imageLabel.image = imageData

def openFile():
fpath = fd.askopenfilenama()

if fpath: dispPhoto(fpath)

root = tk.Tk()
root.geometry("400x350")

btn = tk.Button(text="ファイルを開く",command = openFile)
imageLabel = tk.Label()
btn.pack()
imageLabel.pack()
tk.mainloop()

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
(エラーコード)
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\yutak\AppData\Local\Programs\Python\Python38-32\lib\tkinter_init_.py", line 1883, in call
return self.func(*args)
File "c:\Users\yutak\OneDrive\デスクトップ\MyPython\sample.py", line 15, in openFile
fpath = fd.askopenfilenama()
AttributeError: module 'tkinter.filedialog' has no attribute 'askopenfilenama'

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

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

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

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

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

guest

回答2

0

ベストアンサー

おはようございます。

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

まずはエラー内容を解決しましょう。

AttributeError: module 'tkinter.filedialog' has no attribute 'askopenfilenama'

と出ているので、askopenfilenama箇所が怪しいですね。

askopenfilenama → askopenfilename と修正するとうまくいきます。

次にコードを読み進めると、選択したファイルのパスを元に、label Widgetにて画像を描画したい感じですね。

askopenfilenameだけ利用すると、無秩序にファイル選択されてしまいます(例 : .csv)ので、filetypes optionを活用して、選択できるファイルを制限すると良いでしょう。

以下コードサンプルになります。

python

1import tkinter as tk 2import tkinter.filedialog as fd 3import PIL.Image 4import PIL.ImageTk 5 6 7# label Widgetへ画像を描画する関数 8def displayPhoto(path): 9 # Windowを親要素として、label Widgetを作成する。 10 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 11 imageLabel = tk.Label(root) 12 # Windowを親要素として、label Widgetをどのように表示するのか? 13 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 14 imageLabel.pack() 15 16 # 画像について : https://kuroro.blog/python/Z7k1LSyDyiDHtD5UCjmG/ 17 # Tkinter 8.6以降でも、標準Tkinterではjpg対応できないため、PILを利用する。 18 # 公式ドキュメント(画像) : https://docs.python.org/ja/3/library/tkinter.html#images 19 # ファイルopenコマンドについて : https://carp.cc.it-hiroshima.ac.jp/~tateyama/Lecture/AppEx/PythonImagePIL.html 20 # resize : 画像サイズを300x300へ変更する。 21 newImage = PIL.Image.open(path).resize((300, 300)) 22 # Tkinterで画像が扱える形へ変更する。 23 imageData = PIL.ImageTk.PhotoImage(newImage) 24 25 # label Widgetのimageへ画像情報を追加する。 26 imageLabel.configure(image=imageData) 27 imageLabel.image = imageData 28 29# file dialogを表示する関数 30 31 32def openFile(): 33 # file dialogを表示する。 34 # filetypes : 拡張子を絞り込んで、選択できるファイルを制限する。画像のみを選択できるように、.jpg, .pngのみ選択できるようにする。 35 # dialogについて : https://kuroro.blog/python/Um9TeIMMJAZdFqTYKVE6/ 36 fpath = fd.askopenfilename( 37 filetypes=[("jpg files", "*.jpg"), ("png files", "*.png")]) 38 # ファイルパスが返された場合(ファイルが選択された場合)のみ、画像を描画する関数を呼び出す。 39 if fpath: 40 displayPhoto(fpath) 41 42 43# Windowを作成する。 44root = tk.Tk() 45 46# Windowの画面サイズを設定する。 47# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 48root.geometry("400x350") 49 50# Windowを親要素として、button Widgetを作成する。 51# text : テキスト情報 52# command : ボタンをクリックした時に、実行する関数を設定。openFileとする。 53# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 54btn = tk.Button(root, text="ファイルを開く", command=openFile) 55# Windowを親要素として、button Widgetをどのように表示するのか? 56# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 57btn.pack() 58 59# Windowをループさせて、継続的にWindow表示させる。 60# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 61tk.mainloop()

ご確認いただけますと幸いです。????‍♂️

投稿2021/06/13 23:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kuromaru200

2021/06/14 13:19

kuroro様 ご回答いただきありがとうございます。 一度確認させていただきますね!
guest

0

AttributeError: module 'tkinter.filedialog' has no attribute 'askopenfilenama'

'tkinter.filedialog' には、'askopenfilenama'というアトリビュートは存在しません、といってます。
まずこれをどーにかしましょう

#よくみたらわかるんでは

投稿2020/10/04 14:37

編集2020/10/04 14:38
y_waiwai

総合スコア88042

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

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

kuromaru200

2020/10/04 14:47

迅速なご回答ありがとうございます。 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問