今回は詰まった問題について
ボタンに画像を埋め込んだ成功例
processing_messa_frame.py
減量管理入力補助GUIの処理メッセージフレームの場合
import tkinter as tk import sys import customtkinter as ctk from PIL import Image import subprocess FONT_TYPE = ("meiryo") ctk.set_appearance_mode("Dark") ctk.set_default_color_theme("blue") ~~~中略~~~ #処理メッセージフレームクラス class processing_messageFrame(ctk.CTkFrame): def __init__(self, *args, header_name="processing_messageFrame", **kwargs): super().__init__(*args, **kwargs) self.fonts=(FONT_TYPE, 18) self.header_name = header_name #フォームのセットアップを実行する self.PM_setup_form() def PM_setup_form(self): #処理メッセージエリアのセットアップ self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) self.label_pm = ctk.CTkLabel(self, text=self.header_name, font=(FONT_TYPE, 16)) #エリアのフォントサイズをここで変更する self.label_pm.grid(row=0, column=0, padx=10, sticky="w") self.textbox_pm = ctk.CTkTextbox(self, width=600, height=300, corner_radius=1, wrap=tk.END, event=read_stream) self.textbox_pm.configure(state="disabled", fg_color='pink') #テキストボックスを読み取り専用に設定する self.textbox_pm.grid(row=0, column=1, padx=10, pady=10, sticky='w') self.textbox_pm.insert("0.0", "処理された事が表示されていきます") self.message_textbox= self.textbox_pm.get("0.0", ctk.END) # self.textbox_pm.delete("0.0", ctk.END) self.png_image=ctk.CTkImage(dark_image=Image.open(R"c:/users/ユーザー名/desktop/作業物/pythonプログラム関連/CustomTkinter関連/減量管理入力補助GUI/ボタン画像/減量管理補助入力GUIのフローチャート-png出力のボタン画像.png"), size=(50, 40)) self.png_btn = ctk.CTkButton(master=self, text="PNG出力", image=self.png_image, compound='left', command=png_output) self.png_btn.grid(row=1, column=0, padx=20) self.knee_elbow_btn = ctk.CTkButton(master=self, text="ニートゥエルボ説明", command=knee_elbow_win) self.knee_elbow_btn.grid(row=2, column=0, padx=20) ~~~中略~~~ class Processing_App(ctk.CTk): def __init__(self): super().__init__() self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) self.geometry("900x350") self.title("処理メッセージフレーム-減量管理入力補助GUI") self.pro_frame =processing_messageFrame(master=self) self.pro_frame.grid(row=0, column=1, padx=20, pady=20, sticky="nsew") app = Processing_App() app.mainloop()
にすると画像を埋め込めた
で今回失敗したコードはExercise_count_inputFrame.py
###各運動回数入力する為のフレーム ##作成日:2024-08-10 #残暑バテについてのウィンドウ実装 2024-8-31 from typing import Tuple import customtkinter as ctk from PIL import Image FONT_TYPE = "meiryo" app = ctk.CTk() #運動回数入力フレームクラス class Exercise_count_inputFrame(ctk.CTkFrame): def __init__(self, *args, header_name="Exercise_count_inputFrame", **kwargs): super().__init__(*args, **kwargs) self.fonts = (FONT_TYPE, 18) self.header_name = header_name #フォームのセットアップを実行する self.ECI_setup_form() def ECI_setup_form(self): #運動回数入力エリアのセットアップ self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) self.label_ECI = ctk.CTkLabel(self, text=self.header_name, font=(FONT_TYPE, 16)) #エリアのフォントサイズをここで変更する self.label_ECI.grid(row=0, column=0, padx=10, sticky="w") self.acclimatization_to_heat_image = ctk.CTkImage(dark_image=Image.open(R"c:/users/rユーザー名/desktop/作業物/pythonプログラム関連/CustomTkinter関連/減量管理入力補助GUI/ボタン画像/減量管理補助入力GUIのフローチャート-暑熱順化のボタン画像.png"), size=(50, 30)) self.acclimatization_to_heat_image_btn = ctk.CTkButton(master=self, text="暑熱順化(しょねつじゅんか)について", image=self.acclimatization_to_heat_image, compound='top') self.acclimatization_to_heat_image_btn.grid(row=3, column=0, padx=30) ~~~中略~~~ class Exercise_count_App(ctk.CTk): def __init__(self): super().__init__() self.geometry("500x300") self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) self.title("運動回数入力フレーム-減量管理入力補助GUI") self.Exe_count_frame = Exercise_count_inputFrame(master=self) self.Exe_count_frame.grid(row=0, column=1, padx=30, sticky="nsew") app=Exercise_count_App() app.configure(fg_color="pink", width=200, height=100) #ウィンドウアイコンの設定 #app.iconbitmap(R'C:/users/ryotank-ggh/desktop/作業物/Pythonプログラム関連/CustomTkinter関連/ガントチャートGUI/ウィンドウアイコン関係/make_board_checklist_window.ico') app.mainloop()
で失敗時に以下のようなエラーメッセージを吐いた
例外が発生しました: TclError
image "pyimage1" doesn't exist
File "C:\Users\ユーザー名\Desktop\作業物\Pythonプログラム関連\CustomTkinter関連\Exercise_count_input_frame.py", line 170, in ECI_setup_form
self.acclimatization_to_heat_image_btn = ctk.CTkButton(master=self,
File "C:\Users\ユーザー名\Desktop\作業物\Pythonプログラム関連\CustomTkinter関連\Exercise_count_input_frame.py", line 157, in init
self.ECI_setup_form()
File "C:\Users\ユーザー名\Desktop\作業物\Pythonプログラム関連\CustomTkinter関連\Exercise_count_input_frame.py", line 212, in init
self.Exe_count_frame = Exercise_count_inputFrame(master=self)
File "C:\Users\ユーザー名\Desktop\作業物\Pythonプログラム関連\CustomTkinter関連\Exercise_count_input_frame.py", line 215, in
パッと見どこがどう違うのかが分からない・・・
コードをフローチャートに戻したら何かわかるかな・・・??
あとpathlibでなるべく可読性を良くしないと見づらいな
うーん、長くかかりそう