I'm writing a Python program with a GUI built with the Tkinter module. I'm using a class to define the GUI because it makes it easier to pass commands to buttons and makes the whole thing a bit easier to understand.
The actual initialization of my GUI takes about 150 lines of code. To make this easier to understand, I've written the __init__
function like so:
def __init__(self, root):
self.root = root
self._init_menu()
self._init_connectbar()
self._init_usertree()
self._init_remotetree()
self._init_bottom()
where _init_menu()
, _init_connectbar()
, and so on do all the initialization work. This makes my code easier to follow and prevents __init__
from getting too big.
However, this creates scope issues. Since an Entry widget that I defined in _init_connectbar()
is in the function scope and is not a class attribute, I can't refer to it in other methods in the class.
I can make these problems go away by doing most of the initialization in __init__
, but I'll lose the abstraction I got with my first method.
Should I expand __init__
, or find another way to bring the widgets into class scope?