PyQt: diseño envolvente de widgets dentro de un QScrollArea

Estoy desarrollando una aplicación para memorizar texto usando PyQt4. Quiero mostrar todas las palabras en burbujas para que veas cuánto dura la palabra. Pero cuando tengo todas las burbujas en miQScrollArea, están alineados uno debajo del otro. Me gustaría alinearlos uno al lado del otro, pero con ajuste de texto.

Tengo las burbujas para trabajar usando unQLabel con bordes redondeados Pero ahora que tengo las palabras enQLabel's, PyQt no los considera como palabras, sino como widgets. Entonces PyQt pone un widget debajo del otro. Me gustaría que los widgets se alineen uno al lado del otro hasta que lleguen al final de la línea, y luego deberían pasar a la siguiente línea, es decir,QLabel's debe actuar como palabras en un documento de texto.

Aquí está mi código hasta ahora:

f = open(r'myFile.txt')

class Bubble(QtGui.QLabel):
    def __init__(self, text):
        super(Bubble, self).__init__(text)
        self.word = text
        self.setContentsMargins(5, 5, 5, 5)

    def paintEvent(self, e):
        p = QtGui.QPainter(self)
        p.setRenderHint(QtGui.QPainter.Antialiasing,True)
        p.drawRoundedRect(0,0,self.width()-1,self.height()-1,5,5)
        super(Bubble, self).paintEvent(e)


class MainWindow(QtGui.QMainWindow):
    def __init__(self, text, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.MainArea = QtGui.QScrollArea
        self.widget = QtGui.QWidget()
        vbox = QtGui.QVBoxLayout()
        self.words = []
        for t in re.findall(r'\b\w+\b', text):
            label = Bubble(t)
            label.setFont(QtGui.QFont('SblHebrew', 18))
            label.setFixedWidth(label.sizeHint().width())
            self.words.append(label)
            vbox.addWidget(label)
        self.widget.setLayout(vbox)
        self.MainArea.setWidget(self.widget)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    myWindow = MainWindow(f.read(), None)
    myWindow.show()
    sys.exit(app.exec_())

Cuando ejecuto esto obtengo:

Pero me gustaría las palabras (elQlabel's que contiene las palabras) para estar uno al lado del otro, no uno debajo del otro, como este (photoshopped):

He estado investigando mucho, pero no hay respuestas que me ayuden a alinear los widgets uno al lado del otro.

Respuestas a la pregunta(2)

Su respuesta a la pregunta