Мой код не работает, здесь есть какая-то логическая ошибка? - PullRequest
0 голосов
/ 06 октября 2019

Может ли кто-нибудь мне помочь, я пытаюсь создать банковскую программу, и когда я пытаюсь войти в систему и ввести правильные данные, он по-прежнему говорит "notok". Я ввел некоторые значения для целей тестирования, и он просто не будет работать, и он всегда будет печатать 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 ]

1 голос
/ 06 октября 2019

Вы проверяете, равны ли .get () ваших текстовых полей целому числу, но вы не преобразовали их в целое число, по умолчанию они являются строкой.

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

Лучшая практика требует, чтобы вы преобразовали значение в целое число самостоятельно и выдавали ошибку, когда она не может быть преобразована. Что-то, что сообщает пользователю, что его номер учетной записи или пин-код не прошел проверку, поскольку это не число.

1 голос
/ 06 октября 2019

Значения, которые вы передаете checklog, поступают от вызова .get на tk.Entry, который производит строку (это должно быть сделано, потому что вы можете набирать любой текст, который вам нравится, а не только те, которые выглядят как числа). Сравнение ac==1 не удается, потому что ac является строкой. Вы должны преобразовать значение самостоятельно и обработать случай, когда набирается нечисловое число.

Это не совсем вопрос Tkinter;это та же проблема, что у новичков все время с input().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...