尝试从条目小部件存储信息时出现“TypeError”

问题描述 投票:0回答:0

所以基本上,我不太擅长使用对象和链表,我正在尝试使用它们,但它不起作用天知道为什么

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()            
python oop tkinter storage
© www.soinside.com 2019 - 2024. All rights reserved.