Ir ao conteúdo
  • Cadastre-se

Problema com Classes e Pacotes no python


Posts recomendados

Obs: (Cada Bloco desse é um arquivo, se colocar tudo dentro de um arquivo so dara erro então quando for testarem ai pra caso quererem me ajudar separem em arquivos)

 

Bom estou com um problema na hora de chamar um atributo em um outro arquivo, ou seja eu estou trabalhando com pacotes o primeiro pacote(arquivos diferentes) é o principal com nome de Gerenciador.py e nele tem esse código:

from Tkinter import * 
from constantes import * 
from BD import * 
class main(): def __init__(self, principal): 
  self.frame1 = Frame(principal) 
  self.frame1.pack() 
  self.BCriar = Button(self.frame1, width = 10, command = self.criar, text = 'Criar') 
  self.BCriar.pack(side = LEFT, pady = '10px') 
  self.BGerenciar = Button(self.frame1, width = 10, command = self.gerenciar, text = 'Gerenciar') 
  self.BGerenciar.pack(side = LEFT, pady = '10px') 
  self.BDeletar = Button(self.frame1, width = 10, command = self.deletar, text = 'Deletar') 
  self.BDeletar.pack(side = LEFT, pady = '10px') 
  self.BAjuda = Button(self.frame1, width = 10, command = self.ajuda, text = 'Ajuda')
  self.BAjuda.pack(side = LEFT, pady = '10px') 
  self.BSobre = Button(self.frame1, width = 10, command = self.sobre, text = 'Sobre') 
  self.BSobre.pack(side = LEFT, pady = '10px') 
  def criar(self): 
    self.BCriar.pack_forget() 
    self.BGerenciar.pack_forget() 
    self.BDeletar.pack_forget() 
    self.BAjuda.pack_forget() 
    self.BSobre.pack_forget() 
    criarBanco() 
  def gerenciar(self): 
    pass 
  def deletar(self):
    pass 
  def ajuda(self):
    pass 
  def sobre(self):
    pass 
principal = Tk() 
main(principal) 
principal.geometry('800x600') 
principal.resizable(False, False) 
principal.title('Gerenciador De Cadastro') 
principal.mainloop()
###

Quando clicar no botao criar ele entra na proxima página, que no caso é esse codigo com nome de BD.py(outro arquivo):

 

from Tkinter import *
from sqlite3 import *
from constantes import *
from Criacao import *

class criarBanco(object):
    def __init__(self, principal):
#frames e empacotamento de frames
      self.font = ('Arial', '14', 'bold')
      self.font1 = ('Arial', '10', 'bold')
      self.frame0 = Frame(principal)
      self.frame0.pack(pady = padyFrame0)
      self.frame1 = Frame(principal)
      self.frame1.place()
      self.frame1.pack()
      self.frame1['bg'] = bgFrame1
      self.frame5 = Frame(principal)
      self.frame5.pack(pady = padyFrame0)
      self.frame2 = Frame(principal)
      self.frame2.place()
      self.frame2.pack()
      self.frame2['bg'] = bgFrame2
      self.frameBotEnviar = Frame(principal)
      self.frameBotEnviar.place()
      self.frameBotEnviar.pack(pady = padyBotEnviar)
##Texto de Aviso de Marcado Ou no
      self.nomeMarcado = Label(self.frame5, text = 'Nome = No ', font = self.font1)
      self.nomeMarcado.pack(side = LEFT)
      self.corMarcado = Label(self.frame5, text = ' Cor = No ', font = self.font1)
      self.corMarcado.pack(side = LEFT)
      self.cpfMarcado = Label(self.frame5, text = ' CPF = No  ', font = self.font1)
      self.cpfMarcado.pack(side = LEFT)
      self.emailMarcado = Label(self.frame5, text = ' Email = No', font = self.font1)
      self.emailMarcado.pack(side = LEFT)


#Variaveis CheckButton
      self.Vnome = IntVar()
      self.Vcor = IntVar()
      self.Vcpf = IntVar()
      self.Vemail = IntVar()

#################

       self.L1 = Label(self.frame1, font = self.font, text = "  Nome do Seu Banco de Dados  ", bg = bgNomeDoBanco)       
      self.L1.pack()
      self.LL1 = Label(self.frame1, bg = '#B5B5B5')
      self.LL1.pack()
      self.E1 = Entry(self.frame1, bd = 5, highlightcolor = '#1E90FF')
      self.E1.pack()          
      self.L2 = Label(self.frame1, font = self.font, text = ' Digite a Senha do seu Banco de Dados ', bg = bgNomeDoBanco)
      self.L2.pack()
      self.E2 = Entry(self.frame1, show = '*',  bd = 5, highlightcolor = '#1E90FF')
      self.E2.pack() 
      self.L3 = Label(self.frame1, font = self.font, text = ' Confirme a Senha do seu Banco de Dados ', bg = bgNomeDoBanco)
      self.L3.pack()
      self.E3 = Entry(self.frame1, show = '*', bd = 5, highlightcolor = '#1E90FF')
      self.E3.pack()


## CheckButtons

      self.nome = Checkbutton(self.frame2, bg = bgCheckButton, font = self.font1, command = self.PegarValor, bd = 3, text = 'Nome', onvalue = 1, offvalue = 0, variable = self.Vnome)
      self.nome.pack(side = LEFT)
      self.cor = Checkbutton(self.frame2, bg = bgCheckButton,  font = self.font1, command = self.PegarValor, bd = 3, text = 'Cor', onvalue = 1, offvalue = 0, variable = self.Vcor)
      self.cor.pack(side = LEFT)
      self.cpf = Checkbutton(self.frame2, bg = bgCheckButton,  font = self.font1, command = self.PegarValor, bd = 3, text = 'CPF', onvalue = 1, offvalue = 0, variable = self.Vcpf)
      self.cpf.pack(side = LEFT)   
      self.email = Checkbutton(self.frame2, bg = bgCheckButton,  font = self.font1, command = self.PegarValor, bd = 3, text = 'Email', onvalue = 1, offvalue = 0, variable = self.Vemail)
      self.email.pack(side = LEFT)
      self.BotEnviar = Button(self.frameBotEnviar, command = self.enviaBanco, bg = '#CFCFCF',  text = 'Enviar', font = self.font1, bd = 5)
      self.BotEnviar.pack()

#################
    def PegarValor(self): 
      v = [0,0,0,0]

      if self.Vnome.get() == 1:
        v[0] = 1
        self.nomeMarcado['text'] = 'Nome = Sim  '
      else: 
        self.nomeMarcado['text'] = ' Nome = No  '
      if self.Vcor.get() == 1:
          v[1] = 1
          self.corMarcado['text'] = ' Cor = Sim  '
      else:
        self.corMarcado['text'] = ' Cor = No  '
      if self.Vcpf.get() == 1:
          v[2] = 1
          self.cpfMarcado['text'] = ' CPF = Sim  '
      else:
          self.cpfMarcado['text'] = ' CPF = No  '
      if self.Vemail.get() == 1:
          v[3] = 1
          self.emailMarcado['text'] = ' Email = Sim  '
      else:
          self.emailMarcado['text'] = ' Email = No'

    def enviaBanco(self):
      if self.E2.get() == self.E3.get():
       self.frame0.pack_forget()
       self.frame1.pack_forget()
       self.frame2.pack_forget()
       self.frame5.pack_forget()
       self.nomeMarcado.pack_forget()
       self.corMarcado.pack_forget()
       self.cpfMarcado.pack_forget()
       self.emailMarcado.pack_forget()
       self.frameBotEnviar.pack_forget() 
       self.BotEnviar.pack_forget()
       self.L1.pack_forget()
       self.LL1.pack_forget()
       self.L2.pack_forget()
       self.L3.pack_forget()
       self.E1.pack_forget()
       self.E2.pack_forget()
       self.E3.pack_forget()
       self.nome.pack_forget()
       self.cor.pack_forget()
       self.cpf.pack_forget()
       self.email.pack_forget()
       inicioBanco(principal) 
    else:
       self.E2.delete(0, END) 
       self.E3.delete(0, END)

###############

Assim que voce colocar o nome e a senha e confirmar a senha e apertar enviar ele vai para esse arquivo com nome de Criacao.py

 

from Tkinter import *

class inicioBanco(object):
    def __init__(self, principal):
      self.frame11 = Frame(principal)
      self.frame11.pack()
      self.frame22 = Frame(principal)
      self.frame22.pack()
      usuarios = Label(self.frame11, text = 'Quantas Pessoas voce Quer Cadastrar ?')
      usuarios.pack()
      self.entUsuarios = Entry(self.frame11, bd = 5, highlightcolor = '#1E90FF')
      entUsuarios.pack()
      Benviar = Button(self.frame22, text = 'Enviar', bd = 5)
      Benviar.pack()

ai quando vai para o arquivo acima, da o seguinte erro:

 

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1540, in __call__
    return self.func(*args)
  File "/home/giovanni/Área de Trabalho/Python/BD.py", line 122, in 
enviaBanco
    inicioBanco(principal)
NameError: global name 'principal' is not defined

Eu sei que é porque o nome principla não esta definido mas eu não consigo defini-lo pois principal é a instancia de Tk() então se eu colocar:

 

principal = Tk()
principal.geometry('800x600')
principal.resizable(False, False)
principal.title('Gerenciador De Cadastro')
principal.mainloop()

Ira ficar abrindo varias janela. Então Se entenderem me ajudem preciso muito. Lembrando CADA BLOCO É UM ARQUIVO COM NOME DIFERENTER O PRIMEIRO BOLBO É Gerenciador.py O SEGUNDO É BD.py E O TERCEIRO Criacao.py

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...