首页 > 解决方案 > Tkinter - 用户单击按钮后无法显示图像

问题描述

所以我正在尝试制作一个石头、纸、剪刀的游戏。到目前为止一切正常。但是当我试图让它在玩家选择石头时包含一个石头的图像,当玩家选择剪刀时包含一个剪刀的图像...... - 我就是想不通。我是编程和 Python 的新手,所以如果我没有正确地提出问题或没有格式化代码或其他东西,我很抱歉。希望有人可以提供帮助。告诉我您是否需要了解更多信息。

from tkinter import *
import random


# Dictionaries and vars
outcomes = {
    "steen": {"steen": 1, "papier": 0, "schaar": 2},
    "papier": {"steen": 2, "papier": 1, "schaar": 0},
    "schaar": {"steen": 0, "papier": 2, "schaar": 1}
}

comp_score = 0
player_score = 0


# Main Screen
master = Tk()
master.title("RPS")


# Functions
def converted_outcome(number):
    if number == 1:
        return "steen"
    elif number == 2:
        return "papier"
    elif number == 3:
        return "schaar"


def outcome_handler(user_choice):
    print(user_choice)
    global comp_score
    global player_score
    random_number = random.randint(1, 3)
    computer_choice = converted_outcome(random_number)
    outcome = outcomes[user_choice][computer_choice]
    player_choice_label.config(fg="red", text="speler keuze: " + str(user_choice))
    computer_choice_label.config(fg="green", text="computer keuze : " + str(computer_choice))
    if outcome == 2:
        player_score = player_score + 2
        player_score_label.config(text="speler: " + str(player_score))
        outcome_label.config(fg="blue", text="uitkomst : speler heeft gewonnen")
    elif outcome == 0:
        comp_score = comp_score + 2
        computer_score_label.config(text="Computer : " + str(comp_score))
        outcome_label.config(fg="blue", text="uitkomst : computer heeft gewonnen")
    elif outcome == 1:
        player_score = player_score + 1
        comp_score = comp_score + 1
        player_score_label.config(text="Speler: " + str(player_score))
        computer_score_label.config(text="Computer : " + str(comp_score))
        outcome_label.config(fg="blue", text="uitkomst : gelijkspel")


steen = PhotoImage(file='steen.png')
papier = PhotoImage(file='papier.png')
schaar = PhotoImage(file='scissors.png')


def images(image, master):
    photo = master.PhotoImage(file=image)
    photo.pack()

# Labels
Label(master, text="steen, papier, schaar", font=("Calibri", 14)).grid(row=0, sticky=N, pady=10, padx=200)
Label(master, text="selecteer een optie", font=("Calibri", 12)).grid(row=1, sticky=N)
player_score_label = Label(master, text="speler: 0", font=("Calibri", 12))
player_score_label.grid(row=2, sticky=W)
computer_score_label = Label(master, text="Computer : 0", font=("Calibri", 12))
computer_score_label.grid(row=2, sticky=E)
player_choice_label = Label(master, font=("Calibri", 12))
player_choice_label.grid(row=3, sticky=W)
computer_choice_label = Label(master, font=("Calibri", 12))
computer_choice_label.grid(row=3, sticky=E)
outcome_label = Label(master, font=("Calibri", 12))
outcome_label.grid(row=3, sticky=N)

# Buttons
Button(master, text="steen", width=15, command=lambda *args: [outcome_handler("steen"), images("steen.png", master)]).grid(row=4, sticky=W, padx=5, pady=5)
Button(master, text="papier", width=15, command=lambda: outcome_handler("papier") and images()).grid(row=4, sticky=N, pady=5)
Button(master, text="schaar", width=15, command=lambda: outcome_handler("schaar") and images()).grid(row=4, sticky=E, padx=5,
                                                                                            pady=5)
# Dummy Label
Label(master).grid(row=5)

master.mainloop()

标签: pythontkintertk

解决方案


推荐阅读