文件 updated/changed Tkinter 时图像未显示

Image not showing up when file updated/changed Tkinter

我放置了一张图片,效果非常好,但是当我想将它更改为不同的图片时,它并没有改变。卡片图像与列表中的名称相同,即 2C = 2 of Clubs。

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 赋值时,它是一个 local 名称与标签无关并且函数结束时将被垃圾收集。

通常的做法是将新图像分配给标签,然后在标签对象中保存对图像的引用,这样对图像的引用就不会在函数退出时丢失。请参阅我的示例(我使用的图像与您略有不同...):

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() window,因为 root 通常用于根 window。