Thank you Jarda!!
I've been banging my head on this for a couple of days now.
Below is a complete working ioc.
Paul
PYTHON FILE
===========
#!/usr/local/epics/modules/pythonIoc/pythonIoc
from softioc import builder, softioc
import numpy as np
import pandas
d = {'col1': [1, 2], 'col2': [3, 4]}
x = pandas.DataFrame(d)
x_string = x.to_string()
a_PV = builder.WaveformOut("name",length=len(x_string),FTVL="CHAR")
a_PV.set(np.array([ord(i) for i in x_string]))
print(a_PV.get().tostring())
builder.LoadDatabase()
softioc.iocInit()
softioc.interactive_ioc(globals())
caQtDM FILE
===========
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="caFrame" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="caMultiLineString" name="camultilinestring">
<property name="geometry">
<rect>
<x>30</x>
<y>30</y>
<width>311</width>
<height>191</height>
</rect>
</property>
<property name="channel" stdset="0">
<string notr="true">name</string>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>caFrame</class>
<extends>QFrame</extends>
<header>caFrame</header>
<container>1</container>
</customwidget>
<customwidget>
<class>caMultiLineString</class>
<extends>QPlainTextEdit</extends>
<header>caMultiLineString</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>