为什么我的代码在字符串的长度不为3时会崩溃,而在字符串为3时会起作用?

问题描述 投票:0回答:1
#carPark

from tkinter import *
root = Tk()
root.title("OCR's car park program")

frame = Frame(root)
frame.grid(row = 2, column = 0)

def program():
    loop = True

    while loop:
        if len(plateNumber.get()) == 3:
            welcome.config(text = "Valid plate number.")
            loop = False
        elif len(plateNumber.get()) != 3:
            welcome.config(text = "Invalid plate number.")
            askPlate()

def askPlate():
    global plateNumber
    plateNumber = Entry(frame)
    plateNumber.grid(row = 2, column = 1)
    plateNumberLabel = Label(frame, text = "Enter the last 3 digits of your car's plate number: ")
    plateNumberLabel.grid(row = 2, column = 0)
    checker = Button(root, text = "Click me when you're done.", command = program)
    checker.grid(row = 3, column = 0)

    try:
        plateNumber.delete(END, 0)
    except:
        pass

welcome = Label(root, text = "Welcome to OCR's car park program.")
welcome.grid(row = 0, column = 0)
price = "2"
pricePay = Button(root, text = "Click me to accept the £" + price + " ticket fee.", command = askPlate)
pricePay.grid(row = 1, column = 0)

root.mainloop()

[只要我输入的输入等于3的长度,它就会起作用,但是当它等于3时,它将崩溃。我不知道为什么会这样,真的会感谢您的帮助。

python tkinter
1个回答
0
投票

您不需要循环,然后在错误的时间循环。只需按一下即可检查它是否有效:

from tkinter import *
root = Tk()
root.title("OCR's car park program")
frame = Frame(root)
frame.grid(row = 2, column = 0)


def valid():
    if len(plateNumber.get()) == 3:
        welcome.config(text = "Valid plate number.")

    elif len(plateNumber.get()) != 3:
        welcome.config(text = "Invalid plate number.")
        askPlate()
def askPlate():
    global plateNumber
    plateNumber = Entry(frame)
    plateNumber.grid(row = 2, column = 1)
    plateNumberLabel = Label(frame, text = "Enter the last 3 digits of your car's plate number: ")
    plateNumberLabel.grid(row = 2, column = 0)
    checker = Button(root, text = "Click me when you're done.", command = valid)
    checker.grid(row = 3, column = 0)

    try:
        plateNumber.delete(END, 0)
    except:
        pass
welcome = Label(root, text = "Welcome to OCR's car park program.")
welcome.grid(row = 0, column = 0)
price = "2"
pricePay = Button(root, text = "Click me to accept the £" + price + " ticket fee.", command = askPlate)
pricePay.grid(row = 1, column = 0)



root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.