如何解决石头,纸,剪刀-PythonTkinter
因此,我有一个石头,纸和剪刀的小项目用于学习(特别是使用Tkinter来创建GUI),并且遇到了麻烦。我已经在Python终端中检查了计数器是否在工作,但是它没有更新Label,所以计数器在界面中停留在0。我尝试了一切,然后搜索了其他程序,例如我的程序,它们做了同样的事情,我只是不知道该怎么办。谁能为我解决这个问题? (对此,代码有点过于广泛,对此感到抱歉。另外,一些文本是葡萄牙语的,但我认为这并不重要。)
from tkinter import
import random
from PIL import ImageTk,Image
counterv = 0 #**
counterd = 0 #**
# Inicialization
root = Tk()
root.title('Pedra,Papel,Tesoura')
root.iconbitmap('c:/imagens/pedraico.ico')
# Bot List
lista_ppt = ['Pedra','Papel','Tesoura']
# Comandos externos
counterv_label = Label(root,text=f'Vitórias: **{counterv}** ',bg='blue',anchor=W)
counterd_label = Label(root,text=f'Derrota: **{counterd}** ',bg='red',anchor=E)
# Creating images
inicio_img = ImageTk.PhotoImage(Image.open('c:/imagens/ppt_imagem.png'))
pedra_img = ImageTk.PhotoImage(Image.open('c:/imagens/pedra_.png'))
papel_img = ImageTk.PhotoImage(Image.open('c:/imagens/papel_.png'))
tesoura_img = ImageTk.PhotoImage(Image.open('c:/imagens/tesoura_.png'))
pedrabot_img = ImageTk.PhotoImage(Image.open('c:/imagens/pedrabot.png'))
papelbot_img = ImageTk.PhotoImage(Image.open('c:/imagens/papelbot.png'))
tesourabot_img = ImageTk.PhotoImage(Image.open('c:/imagens/tesourabot.png'))
# Creating labels
pedra_tela = Label(image=pedra_img)
papel_tela = Label(image=papel_img)
tesoura_tela = Label(image=tesoura_img)
pedrabot_tela = Label(image=pedrabot_img)
papelbot_tela = Label(image=papelbot_img)
tesourabot_tela = Label(image=tesourabot_img)
empate = Label(root,text='Empate')
vitoria = Label(root,text='Vitória.')
derrota = Label(root,text='Derrota')
imagem_inicial = Label(image=inicio_img)
indicador = Label(root,text='<- Você - - Bot ->')
# Defining
def b_pedra():
global bot
global counterv #**
global counterd #**
bot = random.choice(lista_ppt)
pedra_tela.grid_forget()
papel_tela.grid_forget()
tesoura_tela.grid_forget()
imagem_inicial.grid_forget()
empate.grid_forget()
derrota.grid_forget()
vitoria.grid_forget()
indicador.grid_forget()
indicador.grid(row=1,column=1)
pedrabot_tela.grid_forget()
papelbot_tela.grid_forget()
tesourabot_tela.grid_forget()
if bot == 'Pedra':
pedra_tela.grid(row=1,column=0)
pedrabot_tela.grid(row=1,column=2)
empate.grid(row=3,column=0,columnspan=3)
elif bot == 'Papel':
pedra_tela.grid(row=1,column=0)
papel_tela.grid(row=1,column=2)
derrota.grid(row=3,columnspan=3)
counterd += 1 #**
elif bot == 'Tesoura':
pedra_tela.grid(row=1,column=0)
tesoura_tela.grid(row=1,column=2)
vitoria.grid(row=3,columnspan=3)
counterv += 1 #**
counterv_label.grid_forget() #**
counterd_label.grid_forget()
counterv_label.grid(row=4,column=0)
counterd_label.grid(row=4,column=2)
def b_papel():
global bot
global counterv #**
global counterd #**
bot = random.choice(lista_ppt)
pedra_tela.grid_forget()
papel_tela.grid_forget()
tesoura_tela.grid_forget()
imagem_inicial.grid_forget()
empate.grid_forget()
derrota.grid_forget()
vitoria.grid_forget()
indicador.grid_forget()
indicador.grid(row=1,column=1)
pedrabot_tela.grid_forget()
papelbot_tela.grid_forget()
tesourabot_tela.grid_forget()
if bot == 'Pedra':
papel_tela.grid(row=1,column=0)
pedra_tela.grid(row=1,columnspan=3)
counterv += 1 #**
elif bot == 'Papel':
papel_tela.grid(row=1,column=0)
papelbot_tela.grid(row=1,columnspan=3)
elif bot == 'Tesoura':
papel_tela.grid(row=1,columnspan=3)
counterd += 1 #**
counterv_label.grid_forget() #**
counterd_label.grid_forget()
counterv_label.grid(row=4,column=2)
def b_tesoura():
global bot
global counterv #**
global counterd #**
bot = random.choice(lista_ppt)
pedra_tela.grid_forget()
papel_tela.grid_forget()
tesoura_tela.grid_forget()
imagem_inicial.grid_forget()
empate.grid_forget()
derrota.grid_forget()
vitoria.grid_forget()
indicador.grid_forget()
indicador.grid(row=1,column=1)
pedrabot_tela.grid_forget()
papelbot_tela.grid_forget()
tesourabot_tela.grid_forget()
if bot == 'Pedra':
tesoura_tela.grid(row=1,columnspan=3)
counterd += 1 #**
elif bot == 'Papel':
tesoura_tela.grid(row=1,columnspan=3)
counterv += 1 #**
elif bot == 'Tesoura':
tesoura_tela.grid(row=1,column=0)
tesourabot_tela.grid(row=1,columnspan=3)
counterv_label.grid_forget() #**
counterd_label.grid_forget()
counterv_label.grid(row=4,column=0)
counter_label.grid(row=4,column=2)
# Buttons
pedra = Button(root,text='Pedra',padx=40,pady=20,borderwidth=5,command=b_pedra)
papel = Button(root,text='Papel',command=b_papel)
tesoura = Button(root,text='Tesoura',command=b_tesoura)
pedra.grid(row=2,column=0)
papel.grid(row=2,column=1)
tesoura.grid(row=2,column=2)
imagem_inicial.grid(row=0,columnspan=3)
root.mainloop()
解决方法
您的标签未更新,因为您尚未将其连接到任何文本,这意味着它不知道更改后会显示什么文本。 您可以使用StringVar()做什么,只要更改文本,它就会自动更新标签。
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<button v-on:click="showCheckout">Click Me</button>
{{showProduct}}
</div>
因此,每当调用counter.set时,标签就会自动使用新的计数器值进行更新。 初始化标签时,您可以提供一个textvariable参数,该参数用于标签更改时显示的文本,Tkinter会自动为我们更新它。
您可以在这里how to change/update Tkinter label
了解更多信息 ,欢迎堆栈溢出。
标签未更新的原因是在初始化时已为其赋予固定值。要更新标签的值,您可以使用以下两种选择:
- 如@Mahendra Suthar所述,在标签上附加
textvariable
并稍后更新标签的值,或在标签上使用.update()
方法。 - 您可以使用
.configure
或label.configure(text = 'Updated_text')
来使用label['text'] = 'Updated_text'
方法来设置文本的值。
这是您代码的有效示例(由于无法使用,因此我将图像更改为文本)
from tkinter import *
import random
from PIL import ImageTk,Image
counterv = 0
counterd = 0
# Inicialization
root = Tk()
root.title('Pedra,Papel,Tesoura')
#root.iconbitmap('c:/imagens/pedraico.ico')
# Bot List
lista_ppt = ['Pedra','Papel','Tesoura']
# Comandos externos
counterv_label = Label(root,text = f'Vitórias: {counterv} ',bg='blue',anchor=W)
counterd_label = Label(root,text = f'Derrota: {counterd} ',bg='red',anchor=E)
counterv_label.grid(row=4,column=0)
counterd_label.grid(row=4,column=2)
'''
# Creating images
inicio_img = ImageTk.PhotoImage(Image.open('c:/imagens/ppt_imagem.png'))
pedra_img = ImageTk.PhotoImage(Image.open('c:/imagens/pedra_.png'))
papel_img = ImageTk.PhotoImage(Image.open('c:/imagens/papel_.png'))
tesoura_img = ImageTk.PhotoImage(Image.open('c:/imagens/tesoura_.png'))
pedrabot_img = ImageTk.PhotoImage(Image.open('c:/imagens/pedrabot.png'))
papelbot_img = ImageTk.PhotoImage(Image.open('c:/imagens/papelbot.png'))
tesourabot_img = ImageTk.PhotoImage(Image.open('c:/imagens/tesourabot.png'))
'''
# Creating labels
pedra_tela = Label(text = 'Pedra')
papel_tela = Label(text = 'Papel')
tesoura_tela = Label(text = 'Tesoura')
pedrabot_tela = Label(text = 'Pedra Bot')
papelbot_tela = Label(text = 'Papel Bot')
tesourabot_tela = Label(text = 'Tesoura Bot')
empate = Label(root,text='Empate')
vitoria = Label(root,text='Vitória.')
derrota = Label(root,text='Derrota')
imagem_inicial = Label(text='Inicio')
indicador = Label(root,text='<- Você - - Bot ->')
# Defining
def b_pedra():
global bot
global counterv
global counterd
bot = random.choice(lista_ppt)
pedra_tela.grid_forget()
papel_tela.grid_forget()
tesoura_tela.grid_forget()
imagem_inicial.grid_forget()
empate.grid_forget()
derrota.grid_forget()
vitoria.grid_forget()
indicador.grid_forget()
indicador.grid(row=1,column=1)
pedrabot_tela.grid_forget()
papelbot_tela.grid_forget()
tesourabot_tela.grid_forget()
if bot == 'Pedra':
pedra_tela.grid(row=1,column=0)
pedrabot_tela.grid(row=1,column=2)
empate.grid(row=3,column=0,columnspan=3)
elif bot == 'Papel':
pedra_tela.grid(row=1,column=0)
papel_tela.grid(row=1,column=2)
derrota.grid(row=3,columnspan=3)
counterd += 1
elif bot == 'Tesoura':
pedra_tela.grid(row=1,column=0)
tesoura_tela.grid(row=1,column=2)
vitoria.grid(row=3,columnspan=3)
counterv += 1
counterv_label.configure(text = f'Vitórias: {counterv} ')
counterd_label.configure(text = f'Derrota: {counterd} ')
def b_papel():
global bot
global counterv
global counterd
bot = random.choice(lista_ppt)
pedra_tela.grid_forget()
papel_tela.grid_forget()
tesoura_tela.grid_forget()
imagem_inicial.grid_forget()
empate.grid_forget()
derrota.grid_forget()
vitoria.grid_forget()
indicador.grid_forget()
indicador.grid(row=1,column=1)
pedrabot_tela.grid_forget()
papelbot_tela.grid_forget()
tesourabot_tela.grid_forget()
if bot == 'Pedra':
papel_tela.grid(row=1,column=0)
pedra_tela.grid(row=1,columnspan=3)
counterv += 1
elif bot == 'Papel':
papel_tela.grid(row=1,column=0)
papelbot_tela.grid(row=1,columnspan=3)
elif bot == 'Tesoura':
papel_tela.grid(row=1,columnspan=3)
counterd += 1
counterv_label.configure(text = f'Vitórias: {counterv} ')
counterd_label.configure(text = f'Derrota: {counterd} ')
def b_tesoura():
global bot
global counterv
global counterd
bot = random.choice(lista_ppt)
pedra_tela.grid_forget()
papel_tela.grid_forget()
tesoura_tela.grid_forget()
imagem_inicial.grid_forget()
empate.grid_forget()
derrota.grid_forget()
vitoria.grid_forget()
indicador.grid_forget()
indicador.grid(row=1,column=1)
pedrabot_tela.grid_forget()
papelbot_tela.grid_forget()
tesourabot_tela.grid_forget()
if bot == 'Pedra':
tesoura_tela.grid(row=1,columnspan=3)
counterd += 1
elif bot == 'Papel':
tesoura_tela.grid(row=1,columnspan=3)
counterv += 1
elif bot == 'Tesoura':
tesoura_tela.grid(row=1,column=0)
tesourabot_tela.grid(row=1,columnspan=3)
counterv_label.configure(text = f'Vitórias: {counterv} ')
counterd_label.configure(text = f'Derrota: {counterd} ')
# Buttons
pedra = Button(root,text='Pedra',padx=40,pady=20,borderwidth=5,command=b_pedra)
papel = Button(root,text='Papel',command=b_papel)
tesoura = Button(root,text='Tesoura',command=b_tesoura)
pedra.grid(row=2,column=0)
papel.grid(row=2,column=1)
tesoura.grid(row=2,column=2)
imagem_inicial.grid(row=0,columnspan=3)
root.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。