def fillTagModel(model,dcm,regex=None):
'''Fill a QStandardItemModel object `model' with a tree derived from tags in `dcm', filtering by pattern `regex'.'''
try:
regex=re.compile(str(regex),re.DOTALL)
except:
regex='' # no regex or bad pattern
def _datasetToItem(parent,d):
'''Add every element in `d' to the QStandardItem object `parent', this will be recursive for list elements.'''
for elem in d:
value=_elemToValue(elem)
tag='(%04x, %04x)'%(elem.tag.group,elem.tag.elem)
parent1 = QtGui.QStandardItem(str(elem.name))
tagitem = QtGui.QStandardItem(tag)
if isinstance(value,str):
try:
value=value.decode('ascii')
if '\n' in value or '\r' in value: # multiline text data should be shown as repr
value=repr(value)
except:
value=repr(value)
if not regex or re.search(regex,str(elem.name)+tag+value) is not None:
parent.appendRow([parent1,tagitem,QtGui.QStandardItem(value)])
elif value is not None and len(value)>0:
parent.appendRow([parent1,tagitem])
for v in value:
parent1.appendRow(v)
def _elemToValue(elem):
'''Return the value in `elem', which will be a string or a list of QStandardItem objects if elem.VR=='SQ'.'''
value=None
if elem.VR=='SQ':
value=[]
for i,item in enumerate(elem):
parent1 = QtGui.QStandardItem('%s %i'%(elem.name,i))
_datasetToItem(parent1,item)
if not regex or parent1.hasChildren(): # discard sequences whose children have been filtered out
value.append(parent1)
elif elem.name!='Pixel Data':
value=str(elem.value)
return value
_datasetToItem(model,dcm)
评论列表
文章目录