所以基本上,我不太擅长使用对象和链表,我正在尝试使用它们,但它不起作用天知道为什么
from controller import Controller
from tkinter import *
from model.Cliente import *
from model.ClientLinkedList import *
from model.Despesas import *
from tkinter import messagebox
import random
import string
class View:
def __init__(self, root):
self.clientes = ClientLinkedList()
#Frame
self.root = root
self.root.resizable(False,False)
self.root.geometry("400x400")
#Imagem
#self.logo = PhotoImage(file = 'orçamento-de-tesouraria.png')
#self.logo = self.logo.subsample(1)
#self.logo_label = Label(self.root, image = self.logo, anchor="center")
#self.logo_label.place(x=-300,y=-80)
self.controller = Controller()
self.botao_1 = Button(self.root, text = "Registar", font = ('Arial', 14), command = lambda: (self.pos_menu(1),self.controller.apagar_so_um_botao(self.logo_label)))
self.botao_2 = Button(self.root, text = "Iniciar sessão", font = ('Arial', 14), command = lambda: (self.pos_menu(2),self.controller.apagar_so_um_botao(self.logo_label)))
self.botao_3 = Button(self.root, text = 'X', background = 'Red', command = lambda: self.controller.fechar_janela(self.root))
self.botao_1.place(x= 150, y= 130 ) #posição botão Registar
self.botao_2.place(x= 130, y= 180) #posição botão Iniciar sessão
self.botao_3.place(x= 380, y= 0) #posição botão "X"
def pos_menu(self,x): #x = variavel random
self.controller.apagar_botao(self.botao_1,self.botao_2,self.botao_3)
lista = [] #temporaria
lista_1 = self.controller.password(lista) #verificar se está armazenada a lista final ou não
if x == 1: #Registar
entrada_1 = Entry(self.root, font = ('Arial', 14), borderwidth = 10)
entrada_2 = Entry(self.root, font = ('Arial', 14), borderwidth = 10)
entrada_3 = Entry(self.root, font = ('Arial', 14), borderwidth = 10, show = '*')
voltar_menu = Button(self.root, text = 'X',background='Red', command= lambda : (self.menu(entrada_1,entrada_2,entrada_3),self.controller.apagar_botao(nome_utlizador,nif,palavra_passe),self.controller.apagar_botao(sugestao_password,voltar_menu,registo),self.controller.apagar_so_um_botao(sugestao_password)))
registo = Button(self.root, text = "Registar", command=lambda: self.registar(entrada_1,entrada_2,entrada_3))
nome_utlizador = Label(self.root, text="""
Insira um Nome-de-utilizador:
""" , font = ('Arial', 12))
nif = Label(self.root, text = """
Insira o seu NIF:
""", font = ('Arial', 12))
palavra_passe = Label(self.root, text="""
Insira uma Palavra-passe: (mínimo 8 caracteres)
""", font = ('Arial', 12))
sugestao_password = Label(self.root, text =f'sugestão{lista_1}')
nome_utlizador.pack()
entrada_1.pack()
nif.pack()
entrada_2.pack()
palavra_passe.pack()
entrada_3.pack()
sugestao_password.pack()
registo.pack()
voltar_menu.place(x= 380, y= 0)
elif x == 2: #Iniciar sessão
entrada_1 = Entry(self.root, borderwidth = 10)
entrada_2 = Entry(self.root, borderwidth = 10)
entrada_3 = Entry(self.root, borderwidth = 10, show = '*')
voltar_menu = Button(self.root, text = 'X', background = 'Red',command= lambda : (self.menu(entrada_1,entrada_2,entrada_3),self.controller.apagar_botao(nome_utlizador,nif,palavra_passe),self.controller.apagar_so_um_botao(voltar_menu),self.controller.apagar_so_um_botao(concluir)))
nome_utlizador = Label(self.root, text="""
Nome De Utilizador:
""", font = ('Arial', 12))
nif = Label(self.root, text = """
NIF:
""", font = ('Arial', 12))
palavra_passe = Label(self.root, text="""
Palavra Passe:
""", font = ('Arial', 12))
nome_utlizador.pack()
entrada_1.pack()
nif.pack()
entrada_2.pack()
palavra_passe.pack()
entrada_3.pack()
voltar_menu.place(x= 380, y= 0)
concluir = Button(self.root, text = 'Concluir', command=lambda:self.iniciar_sessao(entrada_1,entrada_2,entrada_3))
concluir.pack()
def iniciar_sessao(self,entrada_1,entrada_2,entrada_3):
username = entrada_1
num_id_fisc = entrada_2.get()
passw = entrada_3.get()
user_id = self.clientes.find_username(username)
if username == "" and num_id_fisc == "" and passw == "":
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador, NIF e Palavra-passe.")
elif username == "" and num_id_fisc == "":
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador e NIF.")
elif username == "" and passw == "":
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador e Palavra-passe.")
elif num_id_fisc == "" and passw == "":
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se preencheu o seu NIF e Palavra-passe.")
elif username == "":
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador.")
elif not isinstance(username.get(), str):
messagebox.showwarning("Inicio sessão", "Ocurreu um erro. Nome-de-utilizador inválido!")
elif user_id == -1:
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Esse Nome-de-utilizador não existe.")
elif num_id_fisc == "":
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se preencheu o seu NIF.")
elif len(num_id_fisc) < 9:
messagebox.showwarning("Inicio sessão", "Ocurreu um erro. Número insuficiente de caracteres no NIF, verifique novamente!")
elif len(num_id_fisc) > 9:
messagebox.showwarning("Inicio sessão", "Ocurreu um erro. O seu NIf têm demasiados caracteres, verifique novamente! ")
elif not isinstance(int(num_id_fisc), int):
messagebox.showwarning("Inicio sessão", "Ocurreu um erro. NIF inválido!")
elif passw == "":
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se preencheu a sua Palavra-passe.")
elif len(passw) < 8:
messagebox.showwarning("Inicio sessão", "Ocurreu um erro. Número insuficiente de caracteres na Palavra-passe")
else:
confirmação_pass = self.clientes.get(user_id).get_password()
confirmação_nif = self.clientes.get(user_id).get_nif
if confirmação_pass == passw and confirmação_nif == num_id_fisc:
messagebox.showinfo("Inicio sessão", f"Inicio sessão bem sucedido, aproveite {username}!")
elif confirmação_nif != num_id_fisc and confirmação_pass == passw:
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se colocou o NIF corretamente.")
elif confirmação_pass != passw and confirmação_nif == num_id_fisc:
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se colocou a Palavra-passe correta.")
else:
messagebox.showerror("Inicio sessão", "Ocurreu um erro. Verifique se colocou o NIF e a Palavra-passe corretamente.")
def registar(self,entrada_1,entrada_2,entrada_3):
username = entrada_1
num_id_fisc = entrada_2.get()
passw = entrada_3.get()
user_id = self.clientes.find_username(username)
if username == "" and num_id_fisc == "" and passw == "":
messagebox.showerror("Registo", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador, NIF e Palavra-Passe.")
elif username == "" and num_id_fisc == "":
messagebox.showerror("Registo", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador e NIF.")
elif username == "" and passw == "":
messagebox.showerror("Registo", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador e Palavra-Passe.")
elif num_id_fisc == "" and passw == "":
messagebox.showerror("Registo", "Ocurreu um erro. Verifique se preencheu o seu NIF e Palavra-Passe.")
elif username == "":
messagebox.showerror("Registo", "Ocurreu um erro. Verifique se preencheu o seu Nome-de-utilizador.")
elif not isinstance(username.get(), str):
messagebox.showwarning("Registo", "Ocurreu um erro. Nome-de-utilizador inválido!")
elif self.clientes.find_username(username) != -1:
messagebox.showerror("Registo", "Ocurreu um erro. Utilizador já existe.")
elif num_id_fisc == "":
messagebox.showerror("Registo", "Ocurreu um erro. Verifique se preencheu o seu NIF.")
elif len(num_id_fisc) < 9:
messagebox.showwarning("Registo", "Ocurreu um erro. Número insuficiente de caracteres no NIF, verifique novamente!")
elif len(num_id_fisc) > 9:
messagebox.showwarning("Registo", "Ocurreu um erro. O seu NIf têm demasiados caracteres, verifique novamente! ")
elif not isinstance(int(num_id_fisc), int):
messagebox.showwarning("Registo", "Ocurreu um erro. NIF inválido!")
elif self.clientes.find_nif(num_id_fisc) != -1:
messagebox.showerror("Registo", "Ocurreu um erro. NIF já existe")
elif passw == "":
messagebox.showerror("Registo", "Ocurreu um erro. Verifique se preencheu a sua Palavra-Passe.")
elif len(passw) < 8:
messagebox.showwarning("Registo", "Ocurreu um erro. Número insuficiente de caracteres na Palavra-Passe")
else:
cliente = Cliente(username, num_id_fisc, passw)
self.clientes.insert_first(cliente)
messagebox.showinfo("Registo", f"Registo bem sucedido, aproveite {username}!")
def menu(self,botao_1,botao_2,botao_3):
self.controller.apagar_botao(botao_1,botao_2,botao_3)
self.botao_1 = Button(self.root, text = "Registar", font = ('Arial', 12), command = lambda: (self.pos_menu(1)))
self.botao_2 = Button(self.root, text = "Iniciar sessão", font = ('Arial', 12), command = lambda: (self.pos_menu(2)))
self.botao_3 = Button(self.root, text = 'X',background='Red', command = lambda: self.controller.fechar_janela(self.root))
self.botao_1.place(x= 150, y= 130 )
self.botao_2.place(x= 130, y= 180)
self.botao_3.place(x= 380, y= 0)
def menu_2(self,categoria,categoria_1,descricao,descricao_1,valor,valor_despesa,data,data_despesa,adicionar,visualizar_despesas):
self.controller.apagar_botao(categoria,categoria_1,descricao)
self.controller.apagar_botao(descricao_1,valor,valor_despesa)
self.controller.apagar_botao(data_despesa,adicionar,visualizar_despesas)
self.controller.apagar_so_um_botao(data)
self.despesas = Button(self.root, text= 'Adicionar despesas', command= lambda:
class Cliente:
def __init__(self, nome, nif, password):
self.__nome = nome
self.__nif = nif
self.__password = password
def get_nome(self):
return self.__nome
def set_nome(self, nome_x):
self.__nome = nome_x
def get_nif(self):
return self.__nif
def set_nif(self, nif_x):
self.__nif = nif_x
def get_password(self):
return self.__password
def set_password(self, password_x):
self.__password = password_x
from view import *
from controller import *
if __name__ == '__main__':
root = Tk()
View(root)
root.mainloop()
from tkinter import *
from view import *
import random
import string
from model import Cliente
class Controller:
def password(self,lista):
digitos = 16
for i in range(digitos):
caracteres_especiais = ('_','#','$','%','&','/','=','?','»','*','ç','.','-','+','«','@','£','§','€')
caracteres_especiais_2 = random.choice(caracteres_especiais)
lista.append(caracteres_especiais_2)
for i in range(digitos):
digitos_random = random.randint(0,9)
lista.append(digitos_random)
for i in range(digitos):
caracteres_random = random.choice(string.ascii_letters)
caracteres_final = caracteres_random.lower()
lista.append(caracteres_final)
for i in range(digitos):
caracateres_grandes_random = random.choice(string.ascii_letters)
caracteres_final2 = caracateres_grandes_random.upper()
lista.append(caracteres_final2)
lista.extend(caracteres_especiais)
lista_reorganizada = lista[:]
random.shuffle(lista_reorganizada)
lista_final = lista_reorganizada[:16]
return lista_final
def fechar_janela(self,root):
root.destroy()
def apagar_botao(self,botao_1,botao_2,botao_3):
botao_1.destroy()
botao_2.destroy()
botao_3.destroy()
def apagar_so_um_botao(self,botao):
botao.destroy()