def q_loads(src): def try_getqbytearray(v): if isinstance(v, QByteArray): return v.data() return v try: if isinstance(src, str): src = QByteArray(src.encode()) elif isinstance(src, (list, tuple)): src = QByteArray(bytes(src)) else: src = QByteArray(src) dst = QVariant() dll.loads(sip.unwrapinstance(dst), sip.unwrapinstance(src), False) # dll.dumps(shiboken2.getCppPointer(dst)[0], shiboken2.getCppPointer(src)[0]) value = dst.value() if isinstance(value, str): value = value.encode() if isinstance(value, list): value = [try_getqbytearray(v) for v in value] return value except Exception as e: print('q_loads error:', e) raise ValueError
def isAlive(qobj): """is the underlying C++ object still valid? This function is taken from the book "Rapid GUI Programming with Python and Qt" by Mark Summerfield.""" if qobj is None: return False try: unwrapinstance(qobj) except RuntimeError: return False else: return True
def applyBlurEffect(self, blurImage, radius, quality, alphaOnly, transposed=0, qp=None): blurImage = ctypes.c_void_p(sip.unwrapinstance(blurImage)) radius = ctypes.c_double(radius) quality = ctypes.c_bool(quality) alphaOnly = ctypes.c_bool(alphaOnly) transposed = ctypes.c_int(transposed) if qp: qp = ctypes.c_void_p(sip.unwrapinstance(qp)) _qt_blurImage(qp, blurImage, radius, quality, alphaOnly, transposed)
def MolDraw2DFromQPainter(qpainter, width=-1, height=-1, panelWidth=-1, panelHeight=-1): from PyQt5.Qt import QPainter try: # Prefer the PyQt5-bundled sip from PyQt5 import sip except ImportError: # No bundled sip, try the standalone package import sip from rdkit.Chem.Draw import rdMolDraw2DQt if not isinstance(qpainter, QPainter): raise ValueError("argument must be a QPainter instance") if width <= 0: width = qpainter.viewport().width() if height <= 0: height = qpainter.viewport().height() ptr = sip.unwrapinstance(qpainter) d2d = rdMolDraw2DQt.MolDraw2DFromQPainter_(width, height, ptr, panelWidth, panelWidth) # tie the lifetime of the QPainter to this MolDraw2D object d2d._qptr = qpainter return d2d
def Main(argv): VISUS_REGISTER_NODE_CLASS("MyRenderNode", lambda: MyRenderNode()) viewer = PyViewer() viewer.open("http://atlantis.sci.utah.edu/mod_visus?dataset=2kbit1") # example of adding a PyQt5 widget to C++ Qt mywidget = MyWidget() viewer.addDockWidget("MyWidget", ToCppQtWidget(sip.unwrapinstance(mywidget))) # example of adding a python node to the dataflow root = viewer.getRoot() world_box = viewer.getWorldBox() pynode = MyRenderNode() pynode.glSetRenderQueue(999) pynode.setBounds(Position(world_box)) viewer.addNode(root, pynode) # pynode will get the data from the query query_node = viewer.findNodeByUUID("volume") viewer.connectNodes(query_node, pynode) QApplication.exec() viewer = None print("All done") sys.exit(0)
def testfunc(): m = Chem.MolFromSmiles('c1ccccc1O') Draw.PrepareMolForDrawing(m) qimg = QImage(250, 200, QImage.Format_RGB32) with QPainter(qimg) as qptr: p = sip.unwrapinstance(qptr) d2d = Draw.MolDraw2DFromQPainter_(250, 200, p, -1, -1) raise ValueError("expected")
def testSIPBasics(self): m = Chem.MolFromSmiles('c1ccccc1O') Draw.PrepareMolForDrawing(m) qimg = QImage(250, 200, QImage.Format_RGB32) with QPainter(qimg) as qptr: p = sip.unwrapinstance(qptr) d2d = Draw.MolDraw2DFromQPainter_(250, 200, p) d2d.DrawMolecule(m) qimg.save("testImageFromPyQt-1.png")
def doChange(self, value): t = time() img = self.srcImg.copy() # 复制一份 # For PyQt5 self.dll.cold(sip.unwrapinstance(img), value) # For PySide2 # self.dll.cold(shiboken2.getCppPointer(img)[0], value) self.imgLabel.setPixmap( QPixmap.fromImage(img).scaledToWidth(800, Qt.SmoothTransformation)) print('use time:', time() - t)
def listQThreads(): """Prints Thread IDs (Qt's, not OS's) for all QThreads.""" thr = findObj('[Tt]hread') thr = [t for t in thr if isinstance(t, QtCore.QThread)] try: from PyQt5 import sip except ImportError: import sip for t in thr: print("--> ", t) print(" Qt ID: 0x%x" % sip.unwrapinstance(t))
def GetFullName(qObj): """ get Qt object full name :param qObj: :return: """ pointer = sip.unwrapinstance(qObj) if type(pointer) == long: windowString = mui.MQtUtil.fullName(pointer) if windowString: return windowString else: return '' else: return GetQtWidget(qObj.objectName(), LongName=True)[-1]
def q_dumps(value, bits=32): def en_byte(v): if isinstance(v, str): return QByteArray(v.encode()) elif isinstance(v, (bytes, bytearray)): return QByteArray(v) return v try: if isinstance(value, str): src = QVariant(QByteArray(value.encode())) elif isinstance(value, (bytes, bytearray)): src = QVariant(QByteArray(value)) elif isinstance(value, (tuple, list)): src = QVariant([QVariant(en_byte(v)) for v in value]) else: src = QVariant(value) dst = QByteArray() dll.dumps(sip.unwrapinstance(dst), sip.unwrapinstance(src), bits) # dll.dumps(shiboken2.getCppPointer(dst)[0], shiboken2.getCppPointer(src)[0]) return dst.data() except Exception as e: print('q_dumps error:', e) raise ValueError
def MolDraw2DFromQPainter(qpainter, width=-1, height=-1, panelWidth=-1, panelHeight=-1): if not isinstance(qpainter, QPainter): raise ValueError("argument must be a QPainter instance") if width <= 0: width = qpainter.viewport().width() if height <= 0: height = qpainter.viewport().height() ptr = sip.unwrapinstance(qpainter) d2d = rdMolDraw2D.MolDraw2DFromQPainter_(width, height, ptr, panelWidth, panelWidth) # tie the lifetime of the QPainter to this MolDraw2D object d2d._qptr = qpainter return d2d
def unwrapInstance(qObj): if USE_PYQT_MODULE: return sip.unwrapinstance(qObj) else: return shiboken.unwrapInstance(qObj)