ValueError:基数为10的int()的文本无效:“”(Tkinter)

2024-04-24 05:29:56 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图运行这段代码时,一个ValueError出现,暗指函数numRandom。我认为Python可以将int的字符串表示形式传递给int

import tkinter
import random

window = tkinter.Tk()
window.geometry('600x500')

x = random.randint(1,300)
remainingTime = True
Attempts = 4

def numRamdom():
    global Attempts
    while Attempts > 0:
        numWritten = int(entryWriteNumber.get())
        if numWritten > x:
            lblClue.configure(text = 'Its a bigger number')
            Attempts = Attempts -1
        if numWritten < x:
            lblClue.configure(text = 'Its a smaller number')
            Attempts = Attempts -1
        if numWritten == x:
            lblClue.configure(text = 'Congratulations ;)')
            remainingTime = False
            return remainingTime, countdown(0)
        if Attempts == 0:
            remainingTime = False
            return remainingTime, countdown(0), Attempts, gameOver()

entryWriteNumber = tkinter.Entry(window)
entryWriteNumber.grid(column = 0, row = 1, padx = 10, pady = 10)

numRamdom()

window.mainloop()

Tags: textimportiftkinterconfigurerandomwindowits
2条回答

问题是,当代码运行时,它直接调用numRamdom(),也就是说,最初条目小部件是空的,它们与这些空条目小部件一起运行,因此出现错误。因此,只需指定一个按钮和一个命令,如:

b = tkinter.Button(root,text='Click me',command=numRamdom)
b.grid(row=1,column=0)

确保在def numRamdom():之后的mainloop()之前说这句话。该按钮仅在单击按钮时运行该功能

或者,如果您想减少按钮,请尝试:

方法1:

root.after(5000,numRamdom) #after 5 sec it will execute function

但是请记住,如果用户没有在5秒内正确输入,则会弹出一些错误

方法2:

def numRamdom(event):
......

entryWriteNumber.bind('<Return>',numRamdom)

这样,如果您在输入小部件中按enter键(输入数据后),它将运行该功能

希望这有帮助,如果有任何错误,一定要让我知道

干杯

下面是一个基于您的代码的完全有效的示例。您的问题是试图在条目中有任何内容之前转换条目的内容。要解决此问题,可以添加一个按钮,该按钮调用命令numRamdom()

import tkinter
import random

window = tkinter.Tk()
window.geometry('600x500')

x = random.randint(1,300)
remainingTime = True
Attempts = 4

def numRamdom():
    global Attempts, lblClue, x
    if Attempts > 0:
            numWritten = int(entryWriteNumber.get())
            if numWritten < x:
                lblClue.configure(text = 'Its a bigger number')
                Attempts = Attempts -1
            elif numWritten > x:
                lblClue.configure(text = 'Its a smaller number')
                Attempts = Attempts -1
            else:
                lblClue.configure(text = 'Congratulations ;)')
                remainingTime = False
                #return remainingTime, countdown(0)
            if Attempts == 0:
                remainingTime = False
                #return remainingTime, countdown(0), Attempts, gameOver()
    else:
        lblClue.configure(text = "You ran out of attempts!")

entryWriteNumber = tkinter.Entry(window)
entryWriteNumber.grid(column = 0, row = 1, padx = 10, pady = 10)

entryWriteButton = tkinter.Button(window, text = "Push me!", command = numRamdom)
entryWriteButton.grid(column = 1, row = 1)

lblClue = tkinter.Label(window)
lblClue.grid(row = 2, column = 1)


window.mainloop()

如果传递的值不能转换为整数,您仍然会得到一个错误,但这很容易用if语句修复

相关问题 更多 >