前提・実現したいこと
参考書に書いてあるゲームを作っているところなのですが、参考書の通りに記述してもエラーが表示されてしまいます。参考書には今の段階で背景画像が表示されると書かれているのですが、表示されません。
発生している問題・エラーメッセージ
python
1Traceback (most recent call last): 2 File "C:/Users/Name/AppData/Local/Programs/Python/Python38-32/stickmangame.py", line 36, in <module> 3 g = Game() 4 File "C:/Users/Name/AppData/Local/Programs/Python/Python38-32/stickmangame.py", line 17, in __init__ 5 self.bg = PhotoImage(file="background.gif") 6 File "C:\Users\Name\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 4061, in __init__ 7 Image.__init__(self, 'photo', name, cnf, master, **kw) 8 File "C:\Users\Name\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 4006, in __init__ 9 self.tk.call(('image', 'create', imgtype, name,) + options) 10_tkinter.TclError: couldn't open "background.gif": no such file or directory 11
該当のソースコード
from tkinter import * import random import time class Game: def __init__(self): self.tk = Tk() self.tk.title("ミスタースティックマンの脱出") self.tk.resizable(0, 0) self.tk.wm_attributes("-topmost", 1) self.canvas = Canvas(self.tk, width=500, height=500, highlightthickness=0) self.canvas.pack() self.tk.update() self.canvas_height = 500 self.canvas_width = 500 root = tkinter.Tk() self.bg = PhotoImage(file="background.gif", master=root) w = self.bg.width() h = self.bg.height() for x in range(0, 5): for y in range(0, 5): self.canvas.create_image(x * w, y * h, image=self.bg, anchor='nw') self.sprites = [] self.runnning = True def mainloop(self): while 1: if self.running == True: for sprite in self.sprites: sprite.move() self.tk.update_idletasks() self.tk.update() time.sleep(0.01) g = Game() g.mainloop()
試したこと
解答と見比べた
同様の質問がないか調べた
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
background.gif は、同じ階層に存在するのですかね?
もしかして同じフォルダに存在するだけでは同じ階層に存在するとは言えないのでしょうか?
仮にそうだとした場合、どうやって階層をそろえればよいでしょうか?
最近始めたばかりでまだまだ知識が足りないので、お手数をおかけしますが、教えていただけると幸いです。
同じエラーは再現しませんでした。幾つか修正しないと他の箇所で止ります。
> 同じフォルダに存在するだけでは同じ階層に存在する
ファイルは存在するけど上記のエラーとなってる場合、
このコードのファイル指定では、厳密には
「Pythonファイルと同じ場所」という意味ではなく、
「プログラムを実行した場所」となる点に注意です。
そのフォルダ内から実行の場合、双方は同じ場所を指しますが、
別の場所から実行した場合は、正しく画像ファイルを参照できません。
回答1件
あなたの回答
tips
プレビュー