Hola,
puedes crear un componente nuevo de dos maneras: Heredando de un componente
existente de una librería y readaptarlo a tus necesidades o creando una
clase desde cero. Yo uso wxpython por ser multiplataforma, tiene una buena
cantidad de widgets y buena documentación.
Para readaptar un componente a menudo debes manejar conceptos de POO como
ser, Clase, objetos, herencia, polimorfismo, etc. Lo que se hace es tomar un
componente, heredar del mismo y hacerle algunos cambios, colores, tamaños,
etc.
Para crear un componente nuevo se debe crear una Clase para el mismo. En la
clase se usan objetos básicos como Paneles (Panels), Contenedores
(Containers), PaintDC para dibujar líneas, Eventos, Imágenes, etc. Una vez
que tienes la clase lista, podrás instanciar un objeto en tu programa y se
dibujará el mismo. A menudo para crear interfaces gráficas se usa el
patrón Decorator
https://es.wikipedia.org/wiki/Decorator_(patr%C3%B3n_de_dise%C3%B1o) o
Composite
https://es.wikipedia.org/wiki/Composite_(patr%C3%B3n_de_dise%C3%B1o)
Ver: http://zetcode.com/wxpython/customwidgets/
https://wiki.wxpython.org/CreatingCustomControls
https://wxpython.org/docs/api/
Sds