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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Spyder

Spyderとは、Pythonで分析するために作られたIDEです。プログラムの編集・実行・入力補完・デバッグなどの基本的なIDE機能の他、科学用途の計算をするために要するライブラリも装備。公式・サードパーティ製のプラグインもあり、機能を拡張することもできます。

Python

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

Q&A

0回答

329閲覧

デバック後に実行できなくなってしまう

ppap

総合スコア68

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Spyder

Spyderとは、Pythonで分析するために作られたIDEです。プログラムの編集・実行・入力補完・デバッグなどの基本的なIDE機能の他、科学用途の計算をするために要するライブラリも装備。公式・サードパーティ製のプラグインもあり、機能を拡張することもできます。

Python

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

0グッド

0クリップ

投稿2022/09/09 15:13

前提

spyderを用いて、pythonを扱っています。
もともと問題なく実行できているコードに対してデバックを行うと、
なぜか実行できなくなってしまいます。
※ デバック後に「デバッグを停止」はクリックしています。

実現したいこと

デバック後も、デバック前と同様に実行できるようにしたいです。

コードはtkinterによって「root」という名前のウィンドウを表示させた状態で、
その上から「popup」という名前のウィンドウを表示させるものです。

ブレークポイントを175行目の「 popup.mainloop()」以上の位置に設定しデバッグを行った場合、デバッグ後も問題なくコードを実行できます。
しかし、179行目の「def finish(event):」から200行目「root.mainloop()」のどこかにブレークポイントを設定した場合、デバッグ後にコードを実行できなくなってしまいます。

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

TclError: image "pyimage26" doesn't exist

該当のソースコード

py

1import tkinter as tk 2from tkinter import messagebox 3from PIL import Image, ImageTk 4import datetime 5import openpyxl as px 6 7 8# 結果を保存するExcelブックを作成 9start_time = datetime.datetime.now() 10start_time = start_time.strftime('%Y-%m-%d_%Hh%Mm%Ss') 11wb = px.Workbook() 12ws = wb["Sheet"] 13ws.title = "result" 14 15 16# 選択したシートに、カラムを作成 17ws.cell(row = 1, column = 1).value = "trial" 18ws.cell(row = 1, column = 2).value = "time" 19ws.cell(row = 1, column = 3).value = "preset" 20ws.cell(row = 1, column = 4).value = "svv" 21 22 23# Excelブックは、時刻をブック名として保存 24path = fr"D:\EXPERIMENT\programming\Python\SVV\result\{start_time}.xlsx" 25wb.save(path) 26 27 28# 新規ウィンドウを作成 29root = tk.Tk() 30root.attributes("-fullscreen", True) 31 32 33# 画面サイズの指定 34WIDTH = root.winfo_screenwidth() 35HEIGHT = root.winfo_screenheight() 36 37 38# ウィンドウ上にフレームを作成 39frame = tk.Frame(root) 40frame.place(x = -5, y = -5, width = WIDTH + 10, height = HEIGHT + 10) 41 42 43# フレーム上に、キャンバスを作成 44canvas = tk.Canvas(frame, width = WIDTH, height = HEIGHT, bg = "black") 45canvas.place(x = 0, y = 0, width = WIDTH + 10, height = HEIGHT + 10) 46 47 48# 画像のプリセット角を"c"として定義 49c = preset = 20 50c = c * 10 51R = c / 10 52 53 54# キャンバスにSVV画像を貼り付け 55img = Image.open(f"D:\EXPERIMENT\programming\Python\SVV\svv_barの作成\{R}.png") 56tkimg = ImageTk.PhotoImage(img) 57canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg, anchor = "center", tags = "img") 58 59 60# キャンバスに、透明な画像を貼り付け 61img_snow = Image.open("D:\EXPERIMENT\programming\Python\SVV\svv_snow.png") 62tkimg_snow = ImageTk.PhotoImage(img_snow, width = WIDTH, height = HEIGHT) 63canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg_snow, anchor = "center", tags = "img_snow") 64 65 66# 描画間隔をミリ秒で指定 67interval = datetime.timedelta(milliseconds = 20) 68 69 70# 左回転時の基準時刻を取得し、press_Lに渡す 71def press_L(event): 72 global next_time_L 73 next_time_L = datetime.datetime.now() 74 rotate_L(event) 75 76 77# 右回転時の基準時刻を取得し、press_Rに渡す 78def press_R(event): 79 global next_time_R 80 next_time_R = datetime.datetime.now() 81 rotate_R(event) 82 83 84# 左回転させるコード 85def rotate_L(event): 86 global next_time_L 87 global tkimg 88 global c 89 c = c - 1 90 R = c / 10 91 canvas.delete("all") 92 img = Image.open(f"D:\EXPERIMENT\programming\Python\SVV\svv_barの作成\{R}.png") 93 tkimg = ImageTk.PhotoImage(img) 94 canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg, anchor = "center", tags = "img") 95 canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg_snow, anchor = "center", tags="img_snow") 96 next_time_L += interval 97 now = datetime.datetime.now() 98 delay_ms = int((next_time_L - now).total_seconds() * 1000) 99 id_after = root.after(delay_ms, rotate_L, None) 100 def stop_L(event): 101 root.after_cancel(id_after) 102 canvas.tag_bind("img_snow", "<ButtonPress-1>", press_L) 103 canvas.bind("<ButtonRelease-1>", stop_L) 104 105 106# 右回転させるコード 107def rotate_R(event): 108 global next_time_R 109 global tkimg 110 global c 111 c = c + 1 112 R = c / 10 113 canvas.delete("all") 114 img = Image.open(f"D:\EXPERIMENT\programming\Python\SVV\svv_barの作成\{R}.png") 115 tkimg = ImageTk.PhotoImage(img) 116 canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg, anchor = "center", tags = "img") 117 canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg_snow, anchor = "center", tags="img_snow") 118 next_time_R += interval 119 now = datetime.datetime.now() 120 delay_ms = int((next_time_R - now).total_seconds() * 1000) 121 id_after = root.after(delay_ms, rotate_R, None) 122 def stop_R(event): 123 root.after_cancel(id_after) 124 canvas.tag_bind("img_snow", "<ButtonPress-3>", press_R) 125 canvas.bind("<ButtonRelease-3>", stop_R) 126 127 128# 試行ごとの結果"Ctrl+S"で保存するコード 129trial = 0 130def save(event): 131 global trial 132 MaxRow = ws.max_row + 1 133 trial = trial + 1 134 time = datetime.datetime.now() 135 time = time.strftime('%Y-%m-%d_%Hh%Mm%Ss') 136 ws.cell(row = MaxRow, column = 1).value = trial 137 ws.cell(row = MaxRow, column = 2).value = time 138 ws.cell(row = MaxRow, column = 3).value = preset 139 ws.cell(row = MaxRow, column = 4).value = c / 10 140 wb.save(path) 141 # プリセット角を再定義 142 def pre_angle(): 143 global c 144 global preset 145 global tkimg 146 messagebox.showinfo("設定完了", "次のプリセット角は、" + entry.get() + " degです") 147 c = preset = float(entry.get()) 148 entry.delete(0, tk.END) 149 popup.destroy() 150 canvas.delete("all") 151 c = c * 10 152 R = c / 10 153 # キャンバスにSVV画像を貼り付け 154 img = Image.open(f"D:\EXPERIMENT\programming\Python\SVV\svv_barの作成\{R}.png") 155 tkimg = ImageTk.PhotoImage(img) 156 canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg, anchor = "center", tags = "img") 157 # キャンバスに、透明な画像を貼り付け 158 img_snow = Image.open("D:\EXPERIMENT\programming\Python\SVV\svv_snow.png") 159 tkimg_snow = ImageTk.PhotoImage(img_snow, width = WIDTH, height = HEIGHT) 160 canvas.create_image(WIDTH/2, HEIGHT/2, image = tkimg_snow, anchor = "center", tags = "img_snow") 161 popup = tk.Toplevel() 162 popup.title("保存完了") 163 popup.geometry("500x400") 164 # フレームの作成と設置 165 frame = tk.Frame(popup) 166 frame.grid(column=0, row=0, sticky=tk.NSEW, padx=5, pady=10) 167 # 各種ウィジェットの作成 168 label = tk.Label(frame, text = "次のプリセット角:") 169 entry = tk.Entry(frame) 170 button_execute = tk.Button(frame, text = "実行", command = pre_angle) 171 # 各種ウィジェットの設置 172 label.grid(row = 0, column = 0) 173 entry.grid(row = 0, column = 1) 174 button_execute.grid(row = 1, column = 1) 175 popup.mainloop() 176 177 178# 測定を終了するコード 179def finish(event): 180 root.destroy() 181 182 183# 左クリックで呼び出すイベント 184canvas.tag_bind("img_snow", "<ButtonPress-1>", press_L) 185 186 187# 右クリックで呼び出すイベント 188canvas.tag_bind("img_snow", "<ButtonPress-3>", press_R) 189 190 191# Ctrl+sキーで呼び出すイベント 192root.bind("<Control-Key-s>", save) 193 194 195# Enterキーで呼び出すイベント 196root.bind("<Return>", finish) 197 198 199# メインループ 200root.mainloop() 201 202 203# end. 204 205

試したこと

200行目の「root.mainloop()」の下に
sample = 10
など適当なコードを作成し、そこにブレークポイントを設定した場合、
デバック後も問題なくコードの実行を行うことができました。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問