我正在使用 Tkinter 开发 Python 应用程序。我创建了一个模块,它本质上是一个在应用程序中其他地方调用的模态 - 在同一个文件中,我检查 name 是否为主,如果是,我测试模态类。一切正常,但是当我使用另一个文件中的模块时,出现以下错误:
File "c:\Users\setas\Documents\KID\V2\TkForge\auth.py", line 57, in _setup_ui
self.canvas.create_image(170, 24, image=self.image_1)
File "C:\Users\setas\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 2864, in create_image
return self._create('image', args, kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\setas\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 2850, in _create
return self.tk.getint(self.tk.call(
^^^^^^^^^^^^^
_tkinter.TclError: image "pyimage2" doesn't exist
我在正常使用中没有遇到此错误。
如何加载图像
self.image_1 = tk.PhotoImage(file=load_asset("logo.png", assetArea="auth"))
self.canvas.create_image(170, 24, image=self.image_1)
load_asset 仅提供资产的文件路径,我知道这过于复杂。
模块如何链接 在main.py中
import tabs
import header
import auth
# . . .
# Tabs
header_obj = header.Header(canvas)
header_obj.draw(canvas)
在 header.py 中
import tkinter as tk
import tabs
from utilities import load_asset
import auth
class Tab:
def __init__(self):
pass
def draw(self, canvas):
pass
class Header(Tab):
def __init__(self, canvas):
super().__init__()
self.canvas = canvas
self.CurrentTab = None
self.CurrentButton = None
self.load_images()
def load_images(self):
self.image_1 = tk.PhotoImage(file=load_asset("image_1.png"))
def show_tab(self, button):
tab = None
if button == self.ButtonDrawer:
tab = tabs.Drawer
elif button == self.ButtonAdmin:
if auth.AuthWindow().request_auth():
tab = tabs.Admin
elif button == self.ButtonLogs:
tab = tabs.Logs
if tab:
if self.CurrentTab:
self.CurrentTab.close()
self.CurrentTab = tab(self.canvas)
self.CurrentTab.draw(self.canvas)
我尝试删除不相关的部分,但我已在此处附加了所有文件: https://github.com/SetAsync/KIDUIConcept 如果我需要提供任何其他信息来帮助查找问题,请告诉我。
感谢您提供的任何帮助,谢谢!
我尝试在我的 tkinter 项目上显示图像,但是在外部调用时无法显示图像。
我按照 @TheLizzard 的说明将 master = self.canvas 添加到我的照片图像和按钮中解决了该问题。