当前位置: 首页 > 知识库问答 >
问题:

条目未更新tkinter python

凤经武
2023-03-14

我试图用python模块tkinter创建一个带有输入框的窗口,来制作一个石头剪刀剪纸游戏。然而,每次按下按钮时,我都在努力使输入框更新到另一个值。

from tkinter import *
import random

root = Tk()
root.geometry('450x350')
root.configure(bg='yellow')


#Global variables
text = []
buttonClicked = False

def changeValue():
    global buttonClicked
    if buttonClicked:
        buttonClicked=False
    if not buttonClicked:
        buttonClicked=True

def button_command():
    global text
    text.append(player_entry.get())
    player_entry.delete(0, END)

def final_calculation():
    cmpt_choice = random.choice([0, 1, 2])

    def determine_win(user_choice, cmpt_choice):
        return (user_choice + -cmpt_choice) % 3
        
    if text[0] == 'Rock' or text[0] == 'rock':
        player_choice = 0

    elif text[0] == 'Paper' or text[0] == 'paper':
        player_choice = 1

    elif text[0] == 'Scissors' or text[0] == 'scissors':
        player_choice = 2
    
    else:
        player_choice = 3
        print('Something went wrong with the input')

    if player_choice != 3:

        print(determine_win(player_choice, cmpt_choice))
        return determine_win(player_choice, cmpt_choice)


#Player
player_label = Label(root, text='Rock / Paper / Scissors')
player_entry = Entry(root, width= 20)
player_button = Button(root, text="Confirm", command=lambda:[button_command(), changeValue(), final_calculation()])


player_entry.pack()
player_label.pack()
player_button.pack()

#Positioning
player_entry.place(x = 100, y = 175, anchor = 'center')
player_label.place(x = 100, y = 140, anchor = 'center')
player_button.place(x= 205 , y = 175, anchor = 'center')



root.mainloop()

我正在纠结的是,如果我要编写rock作为输入(假设计算机响应始终为0):

那么我的输出将是0这是正确的,但是,如果我的下一个输入是一些随机的东西,如dsadsad,则所需的输出将是'输入有问题'。然而,似乎第一个输入被保存并继续使用,因为输出仍然是0

另一方面,如果我们从输入dsdasdasd开始,则输出将读作:“Something went white the input”。然后,如果我们将输入写成rock,则输出仍将读作'Something wot white the input'而不是所需的输出0

感谢任何帮助,

OBS!这可能不是编程这种形式的程序的最有效的方法,但我对编程是新的。

共有1个答案

晏正豪
2023-03-14

您的if语句有些错误。您总是将用户输入与列表上的第一个项目进行比较,使用文本[0]时,您需要将其更改为文本[-1]以获得添加到列表中的最后一个项目。所以您的功能是:

def final_calculation():
    global player_choice
    cmpt_choice = random.choice([0, 1, 2])

    def determine_win(user_choice, cmpt_choice):
        return (user_choice + -cmpt_choice) % 3
        
    if text[-1].lower() == 'rock':
        player_choice = 0

    elif text[-1].lower() == 'paper':
        player_choice = 1

    elif text[-1].lower() == 'scissors':
        player_choice = 2
    
    else:
        player_choice = 3
        print('Something went wrong with the input')

    if player_choice != 3:

        print(determine_win(player_choice, cmpt_choice))
        return determine_win(player_choice, cmpt_choice)

您还可以删除并将所有文本转换为小写或大写,然后在它们之间进行比较。

 类似资料:
  • 问题内容: 我在mysql表中具有属性为“ ON UPDATE CURRENT_TIMESTAMP”的时间戳。有没有办法在特殊情况下手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新添加日期) 问题答案: 有没有办法在特殊情况下手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新添加日期) 听起来您需要配置默认约束,以便仅在插入时填充列: 将其更改为仅这意味着任何修订都不会触发时

  • 问题内容: 假设表有三列:,和。 当用户尝试登录时,将使用查询之类的内容检查条目 如果密码匹配,他将继续。我想做的是计算用户登录的次数。因此,只要他成功登录,我就希望增加该字段并将其存储回用户表。我不确定如何使用SqlAlchemy运行更新查询。 问题答案:

  • 但是建议的解决方案对我来说都不起作用。我从sqlite数据库中的RecycerView列表项,当我向左滑动时,相应的数据将成功地从数据库中删除。由于某些原因,昨天一切都工作得很好,删除的项从列表中消失了,但从今天开始,该项在RecycerView中仍然可见。下面是我的代码:

  • 我的代码有点纠结。我已经搜索并尝试了许多方法。我的目标是删除Firebase之前提供给我的应用程序的条目,Firebase数据来自嵌入式设备。我想替换android应用程序中的值。 Firebase工作正常,应用程序将显示Firebase提供的新值,但不会删除以前的条目。 我还有很多事情要做,但想在继续前进之前解决基础问题。 因此,OnChildChanged基本上会显示新的firebase条目,

  • 我有一个带有“Status”布尔值的付款模型,该布尔值默认为false。付款后,我需要将特定付款的“状态”更新为true。 这是我一直试图用来更改特定数据库条目的代码,但它并没有改变它。我做错了什么? 谢谢 这就是最终起作用的原因:

  • 现在你已经知道了怎样用CodeIgniter从数据库中读取数据,但还不知道怎样往数据库中写入数据。在这一节中,你将学到通过怎么扩展之前写过的新闻控制器和数据模型来实现这一功能。 创建一个表单 为了向数据库里输入数据,你需要创建一个表单来输入需要被存储的信息。这就是说你需要一个带两个输入域的表单,一个用来输入标题,一个用来输入内容。另外,你可以通过数据模型中的标题来取得slug。在 applicat