From 9b6d80a6ed853823bb0eaf9712bf43ae8bd552d1 Mon Sep 17 00:00:00 2001 From: Daniel Brown <ddb@star.sr.bham.ac.uk> Date: Sat, 1 Nov 2014 11:24:16 +0000 Subject: [PATCH] adding in gui swtich to stop pyqt4 imports --- pykat/__init__.py | 13 ++++++++++++- pykat/components.py | 40 +++++++++++++++++++++++++++++++++++++--- pykat/detectors.py | 13 ++++++++++--- pykat/finesse.py | 14 ++++++++------ 4 files changed, 67 insertions(+), 13 deletions(-) diff --git a/pykat/__init__.py b/pykat/__init__.py index 7d2920b..01a75cd 100644 --- a/pykat/__init__.py +++ b/pykat/__init__.py @@ -1,4 +1,11 @@ -__version__ = "0.5" +__version__ = "0.6.1" + +# This flag is used to switch on the gui features in pkat at import time +USE_GUI = False + +import pykat.exceptions as pkex + +NoGUIException = pkex.BasePyKatException("No PyQt4 module was found so cannot open a GUI") import finesse import components @@ -6,3 +13,7 @@ import detectors import commands from pykat.utilities.optics.gaussian_beams import beam_param + + + + diff --git a/pykat/components.py b/pykat/components.py index 5684525..37ff73b 100644 --- a/pykat/components.py +++ b/pykat/components.py @@ -11,9 +11,6 @@ from pykat.node_network import * from pykat.exceptions import * import abc -import pykat.gui.resources -import pykat.gui.graphics -from pykat.gui.graphics import * from pykat.SIfloat import * from pykat.param import Param, AttrParam import weakref @@ -21,6 +18,13 @@ import pykat.exceptions as pkex next_component_id = 1 +from pykat import USE_GUI, NoGUIException + +if USE_GUI: + import pykat.gui.resources + import pykat.gui.graphics + from pykat.gui.graphics import * + class NodeGaussSetter(object): def __init__(self, component, node): self.__comp = weakref.ref(component) @@ -149,6 +153,9 @@ class Component(object): @abc.abstractmethod def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + return None @property @@ -403,6 +410,9 @@ class mirror(AbstractMirrorComponent): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])]) @@ -473,6 +483,9 @@ class beamSplitter(AbstractMirrorComponent): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: # FIXME: make proper SVG component for beam splitter self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg", self ,[(-4,24,self.nodes[0]), (-4,6,self.nodes[1]), (14,6,self.nodes[2]), (14,24,self.nodes[3])]) @@ -566,6 +579,9 @@ class space(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._QItem == None: self._QItem = pykat.gui.graphics.SpaceQGraphicsItem(self) @@ -696,6 +712,9 @@ class grating(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.SpaceQGraphicsItem(self) # TODO: make SVG graphic for grating @@ -742,6 +761,9 @@ class isolator(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/isolator.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1]), (14,24,self.nodes[2])]) @@ -784,6 +806,9 @@ class lens(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/lens.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])]) @@ -861,6 +886,9 @@ class modulator(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/modulator.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])]) @@ -926,6 +954,9 @@ class laser(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg", self, [(65,25,self.nodes[0])]) @@ -989,6 +1020,9 @@ class squeezer(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg", self, [(65,25,self.nodes[0])]) diff --git a/pykat/detectors.py b/pykat/detectors.py index df246f0..9ceb2e4 100644 --- a/pykat/detectors.py +++ b/pykat/detectors.py @@ -5,17 +5,21 @@ Created on Fri Feb 01 0split()9:09:10 2013 @author: Daniel """ import exceptions -import pykat.gui.resources - from pykat.utils import * -from pykat.gui.graphics import * from pykat.node_network import * from pykat.param import Param + import collections import pykat.exceptions as pkex import warnings import copy +from pykat import USE_GUI, NoGUIException + +if USE_GUI: + import pykat.gui.resources + from pykat.gui.graphics import * + class BaseDetector(object) : """ This is a base class for all detectors. Classes Detector1 and Detector2 should be used directly. @@ -94,6 +98,9 @@ class BaseDetector(object) : raise NotImplementedError("This function is not implemented") def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + return None @property diff --git a/pykat/finesse.py b/pykat/finesse.py index 96d7af9..b8c1aee 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -46,18 +46,20 @@ from pykat.node_network import NodeNetwork from pykat.detectors import BaseDetector as Detector from pykat.components import Component from pykat.commands import Command, xaxis -from pykat.gui.gui import pyKatGUI from pykat.SIfloat import * from pykat.param import Param, AttrParam import pykat.exceptions as pkex -from PyQt4.QtCore import QCoreApplication -from PyQt4.QtGui import QApplication +from pykat import USE_GUI, NoGUIException + +if USE_GUI: + from pykat.gui.gui import pyKatGUI + from PyQt4.QtCore import QCoreApplication + from PyQt4.QtGui import QApplication from multiprocessing import Process, Manager -NO_GUI = False NO_BLOCK = "NO_BLOCK" pykat_web = "www.gwoptics.org/pykat" @@ -1323,8 +1325,8 @@ class kat(object): return out def openGUI(self): - if NO_GUI: - print "No PyQt4 module was installed so cannot open a GUI" + if not USE_GUI: + raise NoGUIException else: self.app = QCoreApplication.instance() created = False -- GitLab