Estoy escribiendo un programa de Python con una GUI construida con el módulo Tkinter. Estoy usando una clase para definir la GUI porque hace que sea más fácil pasar comandos a los botones y hace que todo sea un poco más fácil de entender.¿Hay algún problema con un __init__ grande?
La inicialización real de mi GUI toma alrededor de 150 líneas de código. Para que esto sea más fácil de entender, he escrito la función __init__
así:
def __init__(self, root):
self.root = root
self._init_menu()
self._init_connectbar()
self._init_usertree()
self._init_remotetree()
self._init_bottom()
donde _init_menu()
, _init_connectbar()
, y así sucesivamente hacer todo el trabajo de inicialización. Esto hace que mi código sea más fácil de seguir y evita que __init__
se vuelva demasiado grande.
Sin embargo, esto crea problemas de alcance. Dado que un widget de entrada que definí en _init_connectbar()
está en el ámbito de la función y no es un atributo de clase, no puedo referirme a él en otros métodos de la clase.
Puedo hacer que estos problemas desaparezcan haciendo la mayor parte de la inicialización en __init__
, pero perdería la abstracción que obtuve con mi primer método.
¿Debo expandir __init__
, o encontrar otra forma de poner los widgets en el alcance de la clase?
Supongo que podría definir cada widget en '__init__' y luego ejecutar métodos para hacer el real configuración y empaque de cada widget. –
Eso no es exactamente lo que estaba sugiriendo. Aunque generalmente tengo un método diferente para hacer el diseño, aún puedes definir tus widgets en tus métodos '__init__widget()', pero crear las variables de instancia de widgets significa que puedes acceder a ellos en donde. – volting