通过线程制作时 Tkinter 图像不显示

Tkinter images not showing up when made through thread

我有一个脚本可以自动更改按钮上的图片。当我手动刷新我的框架时,图片正常显示,但是当脚本刷新时,它不会显示。当我将鼠标悬停在它上面时,出现错误:_tkinter.TclError: image "pyimage" doesn't exist。当您尝试在方法中创建变量时,通常会发生相同的错误,因为该变量未绑定到它的对象。我确实在这里绑定了它,但我认为它发生了,因为我正在使用线程 运行 该方法。当线程创建它的方法 运行 时,我不知道如何绑定变量。我试过不使用线程,但是后来我运行陷入了无限递归的问题。这是代码的重要部分:

self.screens = []
for pc in master.server.clients:
    if pc['screen'] != '':
        self.screens.append(ImageTk.PhotoImage(pc['screen']))
    else:
        self.screens.append(tk.PhotoImage(file='images/info-images/placeholder.png'))
row = 0
column = 0
for img in self.screens:
    btk.ImageButton(self.body.interior, image=img, width=270, height=180).grid(row=row, column=column, padx=10, pady=10)
    if column % 2 == 0 and column != 0:
        row += 1
        column = 0
    else:
        column += 1
thread = threading.Thread(target=self.update_images, args=(master,))
thread.start()

以及线程中的方法:

def update_images(self, master):
    time.sleep(master.server.INFO_COOLDOWN)
    computers = master.server.clients
    for i in range(len(computers)):
        if computers[i] != 'DISCONNECTED_USER':
            if computers[i]['screen'] != '':
                self.screens[i] = ImageTk.PhotoImage(computers[i]['screen'])
            else:
                self.screens[i] = tk.PhotoImage(file='images/info-images/placeholder.png')

不用担心 btk.ImageButton 或它的父 self.body.interior,它们是自定义小部件,它们工作得很好。

没关系,问题是图像未绑定到对象,因此被垃圾收集并清空。