Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
parent
c1cd826542
commit
cdcccf8db1
187
src/SimNDT/gui/HelperMethods.py
Normal file
187
src/SimNDT/gui/HelperMethods.py
Normal file
|
@ -0,0 +1,187 @@
|
|||
#!/usr/bin/env python
|
||||
# encoding: utf-8
|
||||
"""
|
||||
HelperMethods.py
|
||||
|
||||
Created by Miguel Molero on 2013-08-28.
|
||||
Copyright (c) 2013 MMolero. All rights reserved.
|
||||
"""
|
||||
|
||||
import os
|
||||
from PySide.QtCore import *
|
||||
from PySide.QtGui import *
|
||||
|
||||
import collections
|
||||
import re, copy
|
||||
import numpy as np
|
||||
|
||||
|
||||
def sort_nicely(l):
|
||||
"""
|
||||
Sort the given list in the way that humans expect.
|
||||
"""
|
||||
convert = lambda text: int(text) if text.isdigit() else text
|
||||
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
|
||||
l.sort(key=alphanum_key)
|
||||
|
||||
|
||||
def createAction(parent, text, slot=None, shortcut=None, icon=None,
|
||||
tip=None, checkable=False, signal="triggered()"):
|
||||
action = QAction(text, parent)
|
||||
if icon is not None:
|
||||
action.setIcon(QIcon(":/%s" % icon))
|
||||
if shortcut is not None:
|
||||
action.setShortcut(shortcut)
|
||||
if tip is not None:
|
||||
action.setToolTip(tip)
|
||||
action.setStatusTip(tip)
|
||||
if slot is not None:
|
||||
parent.connect(action, SIGNAL(signal), slot)
|
||||
if checkable:
|
||||
action.setCheckable(True)
|
||||
return action
|
||||
|
||||
|
||||
def addActions(target, actions):
|
||||
if not isinstance(actions, collections.Iterable):
|
||||
target.addAction(actions)
|
||||
else:
|
||||
for action in actions:
|
||||
if action is None:
|
||||
target.addSeparator()
|
||||
else:
|
||||
target.addAction(action)
|
||||
|
||||
|
||||
def addWidgets(target, widgets):
|
||||
if not isinstance(widgets, collections.Iterable):
|
||||
target.addWidget(widgets)
|
||||
else:
|
||||
for widget in widgets:
|
||||
target.addWidget(widget)
|
||||
|
||||
|
||||
def setEnabled(actions, state):
|
||||
if not isinstance(actions, collections.Iterable):
|
||||
actions.setEnabled(state)
|
||||
else:
|
||||
for action in actions:
|
||||
if action is not None:
|
||||
action.setEnabled(state)
|
||||
|
||||
|
||||
def setVisible(target, state):
|
||||
if not isinstance(target, collections.Iterable):
|
||||
target.setVisible(state)
|
||||
else:
|
||||
for item in target:
|
||||
if item is not None:
|
||||
item.setVisible(state)
|
||||
|
||||
|
||||
def setText(target, string):
|
||||
if not isinstance(target, collections.Iterable):
|
||||
target.setText(string)
|
||||
else:
|
||||
for item in target:
|
||||
if item is not None:
|
||||
item.setText(string)
|
||||
|
||||
|
||||
def clear(target):
|
||||
if not isinstance(target, collections.Iterable):
|
||||
target.clear()
|
||||
else:
|
||||
for item in target:
|
||||
item.clear()
|
||||
|
||||
|
||||
def is_number(s):
|
||||
try:
|
||||
float(s)
|
||||
return True
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
|
||||
def mat2Obj(fromMat, toObj):
|
||||
for name in fromMat._fieldnames:
|
||||
value = getattr(fromMat, name)
|
||||
if hasattr(toObj, name):
|
||||
# print toObj, name
|
||||
if isinstance(value, float) or isinstance(value, str) or isinstance(value, int):
|
||||
setattr(toObj, name, value)
|
||||
elif isinstance(value, np.ndarray):
|
||||
if value.size == 1:
|
||||
setattr(toObj, name, value.item())
|
||||
else:
|
||||
setattr(toObj, name, value)
|
||||
|
||||
return toObj
|
||||
|
||||
|
||||
def objWithListstoArrays(obj):
|
||||
for name in obj._fieldnames:
|
||||
value = getattr(obj, name)
|
||||
if isinstance(value, list):
|
||||
setattr(obj, name, np.array(value))
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
def objWithArraysToLists(obj):
|
||||
for name in obj._fieldnames:
|
||||
value = getattr(obj, name)
|
||||
if isinstance(value, np.ndarray):
|
||||
setattr(obj, name, value.tolist())
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
def loadDataFromList(data2load, key, Class):
|
||||
if key in data2load:
|
||||
target = list()
|
||||
if isinstance(data2load[key], np.ndarray):
|
||||
for item in (data2load[key]).tolist():
|
||||
_item = copy.deepcopy(mat2Obj(item, Class))
|
||||
target.append(_item)
|
||||
else:
|
||||
_class = copy.deepcopy(mat2Obj(data2load[key], Class))
|
||||
target.append(_class)
|
||||
|
||||
return target
|
||||
else:
|
||||
None
|
||||
|
||||
|
||||
def loadDataFromListWithLabels(data2load, key, listLabels, listClasses):
|
||||
if key in data2load:
|
||||
target = list()
|
||||
|
||||
if isinstance(data2load[key], np.ndarray):
|
||||
for item in (data2load[key]).tolist():
|
||||
for i in range(len(listLabels)):
|
||||
if item.Name == listLabels[i]:
|
||||
_class = copy.deepcopy(mat2Obj(item, listClasses[i]))
|
||||
target.append(_class)
|
||||
else:
|
||||
item = data2load[key]
|
||||
for i in range(len(listLabels)):
|
||||
if item.Name == listLabels[i]:
|
||||
_class = copy.deepcopy(mat2Obj(item, listClasses[i]))
|
||||
target.append(_class)
|
||||
return target
|
||||
|
||||
else:
|
||||
None
|
||||
|
||||
|
||||
def loadDataWithLabels(data2load, key, listLabels, listClasses):
|
||||
if key in data2load:
|
||||
item = data2load[key]
|
||||
for i in range(len(listLabels)):
|
||||
if item.Name == listLabels[i]:
|
||||
target = copy.deepcopy(mat2Obj(item, listClasses[i]))
|
||||
return target
|
||||
else:
|
||||
None
|
Loading…
Reference in New Issue
Block a user