我有一个我放置的图像,它工作得很好,但是当我想将其更改为不同的图像时,它不会改变。卡片图像与列表中的图像具有相同的名称,即俱乐部的 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
通常用于根窗口。