我的代码无法正常工作,这里是否存在一些逻辑错误?

时间:2019-10-06 18:15:32

标签: python python-3.x tkinter

有人可以帮我吗,我正在尝试制作一个银行程序,当我尝试登录并输入正确的详细信息时,它仍然显示“ notok”。我出于测试目的输入了一些值,但它无法正常工作,并且始终会打印出错误消息。请帮助

import tkinter as tk
from tkinter import messagebox
import random 


def checklog(ac,pin):
    if (ac==1) and (pin==2):
        print("ok")
    else:
        print("notok")



def exitwin(master):

    master.destroy()



def acc_no(master):

    acc_no.acc = random.randrange(1000000000,9999999999)

    messagebox.showinfo("Account Number", acc_no.acc)
    return

def openac():

    op = tk.Tk()
    op.title("Open a account")
    op.minsize(500,500)
    op.configure(bg='gray90')

    l1 = tk.Label(op, text="Full Name")
    l1.grid(row=0, column=2)

    openac.name = tk.Entry(op)
    openac.name.grid(row=0, column=3)

    l2 = tk.Label(op, text="Enter Starting Deposit")
    l2.grid(row=1, column=2)

    openac.fun = tk.Entry(op)
    openac.fun.grid(row=1, column=3)

    l3 = tk.Label(op, text="Enter your pin")
    l3.grid(row=2, column=2)

    openac.pin = tk.Entry(op, show="*")
    openac.pin.grid(row=2, column=3)

    sub = tk.Button(op, text="Submit", command=lambda: [acc_no(op), login(), exitwin(op)])

    sub.grid(row=3, column=1)

    op.bind("<Return>", lambda x:[dep(op, e1.get(),e2.get(), e3.get()), acc_no(op), login(op, e1.get(), e2.get(), e3.get()), exitwin(op)])


    return



def login():

    log = tk.Tk()
    log.title("Login")
    log.minsize(500,500)

    l1 = tk.Label(log, text="Enter your account number")
    l1.grid(row=0, column=0)

    e1 = tk.Entry(log)
    e1.grid(row=0, column=1)

    l2 = tk.Label(log, text="Enter your pin")
    l2.grid(row=1, column=0)

    e2 = tk.Entry(log)
    e2.grid(row=1, column=1)

    sub = tk.Button(log, text="Sumbit", command=lambda: checklog(e1.get(), e2.get()))
    sub.grid(row=1, column=2)

    return

    log.mainloop()




def dep(master, name, fund, pin):
    x=0



def draw():
    x=0



def mainmenu():

    mm = tk.Tk()
    mm.title("Bank")
    mm.minsize(400,400)
    mm.configure(bg='gray70')


    l1 = tk.Label(mm, text="HELLO")
    l1.config(font=("Courier", "25"))
    l1.grid(row=0)

    b1 = tk.Button(mm, text="Sign Up", command=openac)
    b1.grid(row=2)

    b2 = tk.Button(mm, text="Log In", command=lambda: login(mm))
    b2.grid(row=3)

    mm.mainloop()

mainmenu()

2 个答案:

答案 0 :(得分:1)

您传递给checklog的值来自调用.get上的tk.Entry,该字符串会产生一个字符串(必须这样做,因为您可以键入自己喜欢的任何文本,而不是只是看起来像数字的数字)。比较ac==1失败,因为ac是一个字符串。您必须自己转换值,并处理键入非数字的情况。

这实际上不是Tkinter的问题;这是初学者一直input()遇到的同样的问题。

答案 1 :(得分:1)

您正在检查文本框的.get()是否等于整数,但尚未将它们转换为整数,默认情况下为字符串。

def checklog(ac, pin):
    if ac == "1" and pin == "2":
        print("ok")
    else:
        print("not ok")

最佳做法是,您自己将值转换为整数,并且在无法转换时抛出错误。告诉用户其帐号或密码验证失败的信息,因为它不是数字。