微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

石头,纸,剪刀-PythonTkinter

如何解决石头,纸,剪刀-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

了解更多信息 ,

欢迎堆栈溢出。

标签未更新的原因是在初始化时已为其赋予固定值。要更新标签的值,您可以使用以下两种选择:

  1. 如@Mahendra Suthar所述,在标签上附加textvariable并稍后更新标签的值,或在标签上使用.update()方法。
  2. 您可以使用.configurelabel.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 举报,一经查实,本站将立刻删除。