Класс GuiStart запускает графический интерфейс tkinter.Окно с кнопками и записями создается с этим классом.Из класса GuiStart я вызываю методы, которые делают такие вещи, как копирование файлов в определенное место
Хорошо, поэтому, чтобы подвести итог, у вас есть класс, который обрабатывает взаимодействие с пользователем, и набор универсальных методов, выполняющихнет взаимодействия с пользователем, что GuiStart предоставляет графический интерфейс для.Если я неправильно понимаю, этот ответ будет гораздо менее полезен.
Это действительно хорошая идея, чтобы разделить их, но для того, чтобы это разделение было эффективным, вы не должны иметь прямых ссылок друг от друга.Это означает, что это окончательное значение НЕ :
class DecToolsClass:
def __init__(self):
self.gui = gui.GuiStart()
Если вам действительно нужны инструменты для доступа к графическому интерфейсу, вы бы добавили его.Но, как правило, вы захотите сделать это наоборот: инструменты должны быть общими и вообще не знать о Gui.С другой стороны, Гуй знает о них.Предполагая, что остальная часть кода верна (я не знаю tkinter):
def main():
tools = DecToolsClass() # not shown, but it no longer has self.gui
root = tkinter.Tk()
my_gui = gui.GuiStart(root, tools)
root.mainloop()
if __name__ == '__main__':
main()
Что означает, конечно, что GuiStart должен взять набор инструментов, который он будет использовать в качестве аргумента:
class GuiStart:
def __init__(self, master, tools):
self.master = master
self.master.title("DECTools 1.3")
self.tools = tools
Теперь повсюду в GuiStart
любое использование инструментов должно проходить через self.tools
.В качестве дополнительного бонуса в ваших юнит-тестах вы можете передать фиктивный объект tools
, который просто проверяет, как он называется, что делает тестирование очень простым.