当活动文件不是 __main__ 时,为什么我的 Tkinter 图像无法加载/保留?

问题描述 投票:0回答:1

我正在使用 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 项目上显示图像,但是在外部调用时无法显示图像。

python python-3.x tkinter module python-module
1个回答
0
投票

我按照 @TheLizzard 的说明将 master = self.canvas 添加到我的照片图像和按钮中解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.