実現したいこと
相対パスを用いても以下のソースコードをが正常に動作できるようにしたいです。
発生している問題・分からないこと
tkinterを用いたアプリ作りで画像を表示させたいのですがエラーが起こってしまいます。
絶対パスだと正常に動作しますが相対パスを使うとエラーが出てしまいます。
教本の通りに書いたのですが何が原因なのでしょう?
わかる方はぜひ教えてください。よろしくお願いします。
エラーメッセージ
error
1 bg = tkinter.PhotoImage(file="otimono/image/neko_bg.png") 2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3 File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/tkinter/__init__.py", line 4151, in __init__ 4 Image.__init__(self, 'photo', name, cnf, master, **kw) 5 File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/tkinter/__init__.py", line 4098, in __init__ 6 self.tk.call(('image', 'create', imgtype, name,) + options) 7_tkinter.TclError: couldn't open "otimono/image/neko_bg.png": no such file or directory
該当のソースコード
Python
1bg = tkinter.PhotoImage(file="otimono/image/neko_bg.png") 2cursor = tkinter.PhotoImage(file="otimono/image/neko_cursor.png") 3img_neko = [ 4 None, 5 tkinter.PhotoImage(file="otimono/image/neko1.png"), 6 tkinter.PhotoImage(file="otimono/image/neko2.png"), 7 tkinter.PhotoImage(file="otimono/image/neko3.png"), 8 tkinter.PhotoImage(file="otimono/image/neko4.png"), 9 tkinter.PhotoImage(file="otimono/image/neko5.png"), 10 tkinter.PhotoImage(file="otimono/image/neko6.png"), 11 tkinter.PhotoImage(file="otimono/image/neko_niku.png") 12]
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
パスの書き方を間違えていないかなど調べてみましたが、初心者なので勝手がわかりません。
補足
> パスのエラーが出てしまいます。何が原因なのでしょう?
> 相対パスを用いても以下のソースコードをが正常に動作できるようにしたい
相対パスの起点となるカレントディレクトリが想定しているディレクトリとは異なっているのでしょう。
対応としてはカレントディレクトリを変更するとよいかと思います。質問にあるディレクトリ構成の画像を見る限り、otimono.py があるディレクトリに image ディレクトリがある様なので、そのディレクトリに移動します。また、file="otimono/image/..." という指定から "otimono/" を除去します。
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
bg = tkinter.PhotoImage(file="image/neko_bg.png")
:
コメントありがとうございます。
回答2件
あなたの回答
tips
プレビュー