Complicação ao importar arquivos

Galera,estou fazendo um arquivo em que preciso importar-los entre si e está dando problemas,podem falar uma maneira de importar sem da essas complicações?

1° arquivo chamado R2

import random

from tkinter import *

Lista_ALUNOaS=[]

class Alunos(object):
    def __init__(self):
        self.Notas={}

    def inserir(self):
        global Lista_ALUNOS
        
        Tkinter.DesempacotaBts()
        while True:
            try:
                Name = Entry.get()
                if Name=='':
                    raise ValueError
            except ValueError:
                Label['text'] = "Por Favor,ponha um nome."
                continue

            if Name not in Lista_ALUNOS:
                Lista_ALUNOS.append(Name)
                self.Notas[Name] = dict([('1',None),('2',None),('3',None),('4',None)])
                break

            else:
                Label['text'] ="Nome já cadastrado,por favor coloque outro."

        return Lista_ALUNOS

Alunos()

from layout import Tkinter

2° Arquivo com nome layout

from tkinter import *
from functools import partial

class Tkinter(object):
    @staticmethod
    def Destroi(root):
        root.Destroy()

    def __init__(self,janela):
        from R2 import Alunos as r
        
        self.lb = Label(janela,text='',font=12)
        self.Entry = Entry(janela)
        
        self.bt_Inseri = Button(janela,text='Inserir Aluno',command= partial(r.inserir,self))
        self.bt_Inseri.pack(fill = X)
        self.bt_Cadastro = Button(janela,text='Cadastrar Notas',command= r.CadastroNotas)
        self.bt_Cadastro.pack(side = TOP,fill=X)
        self.bt_Consulta = Button(janela,text='Consultar Situação',command= r.Consulte)
        self.bt_Consulta.pack(side = TOP,fill = X)
        self.bt_Resumo = Button(janela,text='Resumo da turma',command = r.Resumo)
        self.bt_Resumo.pack(side=TOP,fill=X)
        self.bt_Sair = Button(janela,text='Resumo da turma',command = Tkinter.Destroi)
        self.bt_Sair.pack(side=TOP,fill=X)
    
    def DesempacotaBts(self):
        self.bt_Inseri.pack_forget()
        self.bt_Cadastro.pack_forget()
        self.bt_Consulta.pack_forget()
        self.bt_Resumo.pack_forget()
        self.bt_Sair.pack_forget()

        self.Empacota()
    def Empacota(self):

        self.lb.pack(x=100,y=60)
        self.Entry.pack(side=TOP)

Janela = Tk()

Tkinter(Janela)

Janela.mainloop()

Na sua regra de negócio, quem depende de quem?

Da forma que está você declarou que R2 depende de layout e vice-versa, por isso do erro, principalmente por chamar o módulo tkinter nos dois arquivos…

Além do mais você declarou uma classe sua chamada Tkinter, o que pode conflitar ainda mais com módulo principal… está bem confuso seu código…

Minha opinião, o ideal seria separar o R2 apenas para trazer a lista de alunos, sem qualquer vinculo com Tkinter, etc… trabalharia como um modelo por exemplo.

E na classe layout sim chamaria o R2 normalmente junto com o módulo tkinter…

Outra observação, esse trecho…

def __init__(self,janela):
    from R2 import Alunos as r

Evite-o, pois cada vez que você criar um objeto Tkinter, irá importar novamente o módulo, gerando ainda mais conflitos… quando importar, siga as boas práticas sempre declarando no começo do arquivo…

1 curtida