1) we create ScrollArea in *.ui file, and QWidget under it:
<widget class="QScrollArea" name="scrollArea">
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>788</width>
<height>223</height>
</rect>
</property>
</widget>
</widget>
2) my code:
class mainWindow(QtGui.QMainWindow, UIclass.Ui_MainWindow):
def __init__(self, win_parent = None):
QtGui.QMainWindow.__init__(self, win_parent)
self.setupUi(self)
#create QGridLayout on the first start
self.scrollArea.widget().layout = QtGui.QGridLayout()
self.scrollArea.widget().layout.objectName='inputLayout'
# create cells for input data
self.connect(self.createCells, QtCore.SIGNAL("clicked()"), self.createCellsFunc)
# function for create cells:
def createCellsFunc(self):
# all was doing if we know number columns and number rows
if str(self.text1.toPlainText()).isdigit() and str(self.text2.toPlainText()).isdigit():
# height and length for each cell
h=25
l=50
# delete all old objects (exclude layout)
for u in self.scrollArea.widget().children():
if u.objectName!='inputLayout':
# "delete some later"
u.deleteLater()
# hide now
u.hide()
# set window as parent (not ScrollArea)
u.setParent(self)
# number of columns
hCount=int(self.text1.toPlainText())
# number of rows
vCount=int(self.text2.toPlainText())
for i in range(0,hCount):
for j in range(0,vCount):
# while creating insert text '0' and determine parent
textArea = QtGui.QTextEdit('0', self.scrollArea)
# we give name to the element for fast find him
textArea.objectName = 'a'+str(i)+'-'+str(j)
# dimentions
textArea.setMinimumSize(l,h)
textArea.setMaximumSize(l,h)
# add created element to layer of widget (textArea - adding object, (j + 1) and (i + 1) - coordinates on layer grid of adding object)
self.scrollArea.widget().layout.addWidget(textArea,j+1,i+1)
# put layer to widget
self.scrollArea.widget().setLayout(self.scrollArea.widget().layout)
self.scrollArea.widget().layout
3) get data from cells:
#horizontal cells count
hCount=int(self.text1.toPlainText())
#vertical cells count
vCount=int(self.text2.toPlainText())
#check for all child objects "ScrollBox": did all data is number?
for u in self.scrollArea.findChildren(QtGui.QTextEdit):
try:
float(str(u.toPlainText()))
except:
self.labelWarning.setText(QtCore.QString(u'Some data is not number'))
return None
#put data to array
a,a0=list(),list()
for j in range(0,vCount):
for i in range(0,hCount):
for u in self.scrollArea.findChildren(QtGui.QTextEdit):
if u.objectName=='a'+str(i)+'-'+str(j):
a0.append(float(u.toPlainText()))
a.append(a0)
a0=list()