文件更新/更改时图像未显示 Tkinter



我有一个我放置的图像,它工作得很好,但是当我想将其更改为不同的图像时,它不会改变。卡片图像与列表中的图像具有相同的名称,即俱乐部的 2C = 2。

root=Toplevel()
root.state('zoomed')
root.config(bg='#1b800b')
root.title('PokerChamp')

all_cards  = ['2C','3C','4C','5C','6C','7C','8C','9C','10C','JC','QC','KC','AC','2D','3D','4D','5D','6D','7D','8D','9D','10D','JD','QD','KD','AD','2S','3S','4S','5S','6S','7S','8S','9S','10S','JS','QS','KS','AS','2H','3H','4H','5H','6H','7H','8H','9H','10H','JH','QH','KH','AH']
play_card1 = PhotoImage(file='files/cards/red_back.png')
card6 = Label(root, image=play_card1, bd=0)
card6.place_forget()
select_cards()
def select_cards():
card6.place(relx=0.45, rely=0.75)
player_card1 = random.choice(all_cards)
play_card1 = PhotoImage(file = f'files/cards/{player_card1}.png')
root.update()

加载第一个图像时,在全局命名空间中为其命名play_card1

函数select_cards()是一个本地命名空间,当您为player_card1赋值时,它是一个本地名称,与标签无关,并且在函数结束时将被垃圾回收。

执行此操作的常用方法是将新图像分配给标签,然后在标签对象中保存对图像的引用,以便在函数退出时不会丢失对图像的引用。看看我的例子(我使用的图像和你略有不同...

from tkinter import *
import random
root = Toplevel()
root.config(bg='#1b800b')
root.title('PokerChamp')
all_cards  = ['chapman','cleese','gilliam','idle','jones','palin']
play_card1 = PhotoImage(file='images/beer.png')
card6 = Label(root, image=play_card1, bd=0)
card6.place_forget()
def select_cards():
card6.place(relx=0.5, rely=0.5, anchor='center')
player_card1 = random.choice(all_cards)
play_card1 = PhotoImage(file = f'images/{player_card1}.png')
card6.config(image=play_card1)  # Assign new image to label card6
card6.image = play_card1        # Keep a reference to image
root.update()
select_cards()

此外,我建议不要将名称root用于Toplevel()窗口,因为root通常用于根窗口。

最新更新