What to do: create some number of cells (like matrix n by m).
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()
Комментариев нет:
Отправить комментарий