import sys, string, operator from PyQt4 import QtCore, QtGui class tabby(QtGui.QTabWidget): def __init__(self, intface_spec, parent = None): QtGui.QTabWidget.__init__(self, parent) for k, v in intface_spec.items(): page = QtGui.QWidget() lay = QtGui.QFormLayout() for innerKey, innerVal in v.items(): if innerVal['widget'] == 'QLineEdit': w = QtGui.QLineEdit() elif innerVal['widget'] == 'QComboBox': w = QtGui.QComboBox() if 'list' in innerVal: for listItem in innerVal['list']: w.addItem(listItem) if 'length' in innerVal: w.setFixedWidth(innerVal['length']*9) lay.addRow(innerKey, w) page.setLayout(lay) self.addTab(page, str(k)) if __name__ == "__main__": interface_dict= { 'First Tab' : { 'First Name' : { 'widget' : 'QLineEdit', 'length' : 20 }, 'Last Name' : { 'widget' : 'QLineEdit', 'length' : 30 }, 'Title' : { 'widget' : 'QComboBox', 'list': ['Mr', 'Mrs', 'Ms', 'Dr', 'BDFL'], 'length': 10 } }, 'Second Tab' : { 'City' : { 'widget' : 'QLineEdit', 'length' : 20 }, 'Street' : { 'widget' : 'QLineEdit', 'length' : 30 } } } app = QtGui.QApplication(sys.argv) mw = QtGui.QMainWindow() tabs = tabby(interface_dict) mw.setCentralWidget(tabs) mw.show() sys.exit(app.exec_())