What is dip?

dip is an application development and integration framework for Python and PyQt.

dip supports Python v3.5 and later.

dip is suitable for writing large, complex applications, even those that need to integrate substantial amounts of existing code without changing that code. It is also just as suitable for writing simple GUI utilities. Like any framework dip aims to make common tasks easy and uncommon tasks possible.

dip encourages the development of applications based on reusable components. This applies both to the development of new components so that they can be reused in the future in a different context, and to the reuse of existing components that were developed independently of dip.

Developers can choose to use the different parts of dip as required. dip does not require the wholesale adoption of the framework to develop an application. Developers can also choose to replace different parts of dip with their own implementations.

dip's documentation can be found here. It includes tutorials on using the various dip modules and a complete API reference.


dip includes the following features:

  • the dip-builder utility that can be used to create a stub application that can be run immediately, and can create a packaged version of the application for easy deployment
  • a plugin system that encourages the decoupling, and easy reuse, of components through the use of services and extension points
  • a declarative type system where class attributes define the types of instance attributes that are created automatically when the class is instantiated
  • the ability to define interfaces and to write adaptors that allow an object to appear to implement an interface without needing to change the object itself
  • the ability to specify a user interface declaratively. When combined with the type system it is possible to create a user interface that allows the user to edit a data model with a single line of code
  • dip's user interfaces are testable because a user's actions can be simulated programatically
  • a framework for defining types of storage and data formats for reading and writing application objects
  • a default user interface shell, based on QMainWindow that implements the menu hierarchies, context menus, toolbars etc. common to many applications
  • support for alternative, Qt-based toolkits. For example, an application can automatically use KDE widgets rather than the corresponding Qt widgets if they are available.