python - 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()
解决方案
推荐阅读
- angular-ui-grid - ui-grid columnDefs :如何将单元格内容转换为用户友好和数据函数的某个值?
- regex - Microsoft Word 正则表达式:是否有“或”运算符,例如 |?
- python - UnicodeEncodeError:“charmap”编解码器无法在位置 47 编码字符“\x9f”:字符映射到
- python - pyspellchecker:不拆分 URL
- javascript - 在 Node.js 中退出 CRTL-D 上的 CLI
- c# - 测试流的 FTP 输出
- python - Pytorch ImageNet 数据集
- python - 从无头 Pygame 实例获取图像
- r - 允许集成模型获得多类结果的 R 包?
- zeromq - ZeroMQ - 我们可以在发送消息之前检查订阅者吗?