Python 3 программа входа в tkinter - PullRequest
0 голосов
/ 03 мая 2020

Я недавно создал программу tkinter для входа в игру в кости. Игра еще не создана, так как у меня возникли проблемы при входе. Файл, созданный при использовании реестра, кажется, читается по-разному при входе в систему? Я положил те же самые вещи, которые не распознаются. Спасибо за любую помощь, я новичок в переполнении стека, поэтому я не знаю, как использовать этот сайт.

from tkinter import *

def register_user():

  username_info = username.get()
  password_info = password.get()

  file=open(username_info+".txt", "w")
  file.write(username_info+"\n")
  file.write(password_info)
  file.close()

  username_entry.delete(0, END)
  password_entry.delete(0, END)

  Label(screen1, text = "Registration Sucess", fg = "green" ,font = ("Ariel", 11)).pack()
  screen1.after(1000, lambda: screen1.destroy())

def register():
  global screen1
  screen1 = Toplevel(screen)
  screen1.title("Register")
  screen1.geometry("300x250")

  global username
  global password
  global username_entry
  global password_entry
  username = StringVar()
  password = StringVar()

  Label(screen1, text = "Please enter details below to register:").pack()
  Label(screen1, text = "").pack()
  Label(screen1, text = "Username * ").pack()
  username_entry = Entry(screen1, textvariable = username)
  username_entry.pack()
  Label(screen1, text = "Password * ").pack()
  password_entry =  Entry(screen1, textvariable = password)
  password_entry.pack()
  Label(screen1, text = "").pack()
  Button(screen1, text = "Register", bg = "white", width = 10, height = 1, command = register_user).pack()

def login_user():

  username_info = username.get()
  password_info = password.get()

  file=open(username_info+".txt", "r")             #<--------------  This is the part that doesnt work
  lines = file.readlines()                                          # It should recognise the username and it's corresponding file, and put login success, then close
  a = lines[0]
  b = lines[1]
  if  a == username_entry and b == password_entry:
    Label(screen2, text = "Login Sucess", fg = "green" ,font = ("Ariel", 11)).pack()
    screen2.after(1000, lambda: screen2.destroy())
  else:
    Label(screen2, text = "Login Failure. Please Try Again.", fg = "red", font = ("Ariel", 11)).pack()



def login():
  global screen2
  screen2 = Toplevel(screen)
  screen2.title("Login")
  screen2.geometry("300x250")

  global username
  global password
  global username_entry
  global password_entry
  username = StringVar()
  password = StringVar()

  Label(screen2, text = "Please enter login details below:").pack()
  Label(screen2, text = "").pack()
  Label(screen2, text = "Username * ").pack()
  username_entry = Entry(screen2, textvariable = username)
  username_entry.pack()
  Label(screen2, text = "Password * ").pack()
  password_entry =  Entry(screen2, textvariable = password)
  password_entry.pack()
  Label(screen2, text = "").pack()
  Button(screen2, text = "Login", bg = "white", width = 10, height = 1, command = login_user).pack()


def main_screen():
  global screen
  screen = Tk()
  screen.geometry("300x250")
  screen.title("Welcome!")
  Label(text = "Welcome to James' Dice Game!", bg = "lightskyblue", width = "300", height = "2", font = ("Ariel", 12)).pack()
  Label(text = "").pack()
  Button(text = "Login", bg = "white", height = "2", width = "30", command = login).pack()
  Label(text = "").pack()
  Button(text = "Register", bg = "white", height = "2", width = "30", command = register).pack()

  screen.mainloop()

main_screen()

1 Ответ

0 голосов
/ 03 мая 2020

Ваша проблема с переменной a = lines[0]. Когда я тестировал print(lines), я получил ['user\n', 'password'] вместо предполагаемого ['user', 'password']. Пока что самое простое решение, которое я придумал, это:

  file=open(username_info+".txt", "r")             #<--------------  This is the part that doesnt work
  lines = file.readlines()                                          # It should recognise the username and it's corresponding file, and put login success, then close
  name = lines[0]      <--- # added name variable
  a = name[:-1]        <--- #  then just removed the unwanted part of the string being passed to 'a'
  b = lines[1]
  if  a == username_entry and b == password_entry:
    Label(screen2, text = "Login Sucess", fg = "green" ,font = ("Ariel", 11)).pack()
    screen2.after(1000, lambda: screen2.destroy())
  else:
    Label(screen2, text = "Login Failure. Please Try Again.", fg = "red", font = ("Ariel", 11)).pack()
    print(username_entry, a, password_entry, b) <-- #used to check what you are comparing in your conditional.

То, что я сделал, поместил line[0] в переменную, а затем просто удалил последний символ из строки. Я добавил оператор print после условного отказа, чтобы увидеть, что сравнивается. a и b теперь представляют правильные строки для сравнения.

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