⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 owmoleculevisualizer.py

📁 orange源码 数据挖掘技术
💻 PY
📖 第 1 页 / 共 2 页
字号:
"""<name>Molecule visualizer</name>"""

import orange
import orngChem
from OWWidget import *
from qt import *
import OWGUI
import sys, os
import vis
from openeye.oechem import *

class DrawContext:
    def __init__(self, molecule="", fragment="", size=200, imageprefix="", imagename="", title=""):
        self.molecule=molecule
        self.fragment=fragment
        self.size=size
        self.imageprefix=imageprefix
        self.imagename=imagename
        self.title=title

class BigImage(QDialog):
    def __init__(self, context, *args):
        apply(QDialog.__init__, (self,)+args)
        self.context=context
        self.label=QLabel(self)
        self.imagename=context.imagename or context.imageprefix+"_big.bmp"
        self.imageSize=400
        self.renderImage()

    def renderImage(self):
        if self.context.fragment:
            vis.moleculeFragment2BMP(self.context.molecule, self.context.fragment, self.imagename, self.imageSize, self.context.title)
        else:
            vis.molecule2BMP(self.context.molecule, self.imagename, self.imageSize, self.context.title)
        pix=QPixmap()
        pix.load(self.imagename)
        self.label.setPixmap(pix)
        self.label.resize(pix.width(), pix.height())
            
    def resizeEvent(self, event):
        apply(QDialog.resizeEvent, (self, event))
        self.imageSize=min(event.size().width(), event.size().height())
        self.renderImage()
        
    
class MolImage(QLabel):
    def __init__(self, master, parent, context):
        apply(QLabel.__init__,(self, parent))
        #print filename
        self.context=context
        self.master=master
        imagename=context.imagename or context.imageprefix+".bmp"
        if context.fragment:
            vis.moleculeFragment2BMP(context.molecule, context.fragment, imagename, context.size, context.title)
        else:
            vis.molecule2BMP(context.molecule, imagename, context.size, context.title)
        self.load(imagename)
        self.selected=False
        self.setFrameStyle(QFrame.Panel | QFrame.Raised)
        
    def load(self, filename):
        self.pix=QPixmap()
        if not self.pix.load(filename):
            print "Failed to load "+filename
            return
        self.resize(self.pix.width(), self.pix.height())
        self.setPixmap(self.pix)

    def paintEvent(self, event):
        apply(QLabel.paintEvent,(self, event))
        if self.selected:
            painter=QPainter(self)
            painter.setPen(QPen(Qt.red, 2))
            painter.drawRect(2, 2, self.width()-3, self.height()-3)

    def mousePressEvent(self, event):
        self.master.mouseAction(self, event)

    def mouseDoubleClickEvent(self, event):
        d=BigImage(self.context, self)
        d.show()
        
class ScrollView(QScrollView):
    def __init__(self, master, *args):
        apply(QScrollView.__init__, (self,)+args)
        self.master=master
        self.viewport().setMouseTracking(True)
        self.setMouseTracking(True)
        
    def resizeEvent(self, event):
        apply(QScrollView.resizeEvent, (self, event))
        size=event.size()
        w,h=size.width(), size.height()
        oldNumColumns=self.master.numColumns
        numColumns=min(w/self.master.imageSize or 1, 100)
        if numColumns!=oldNumColumns:
            self.master.numColumns=numColumns
            self.master.redrawImages()
        

class OWMoleculeVisualizer(OWWidget):
    settingsList=["colorFragmets","showFragments"]
    def __init__(self, parent=None, signalManager=None, name="Molecule visualizer"):
        apply(OWWidget.__init__,(self, parent, signalManager, name))
        self.inputs=[("Molecules", ExampleTable, self.setMoleculeTable), ("Fragments", ExampleTable, self.setFragmentTable)]
        self.outputs=[("Selected Molecules", ExampleTable)]
        self.colorFragments=1
        self.showFragments=0
        self.selectedFragment=""
        self.moleculeSmiles=[]
        self.fragmentSmiles=[]
        self.defFragmentSmiles=[]
        self.moleculeSmilesAttr=0
        self.moleculeTitleAttr=0
        self.fragmentSmilesAttr=0
        self.imageSize=200
        self.numColumns=4
        self.commitOnChange=0
        ##GUI
        box=OWGUI.radioButtonsInBox(self.controlArea, self, "showFragments", ["Show molecules", "Show fragments"], "Show", callback=self.showImages)
        OWGUI.checkBox(box, self, "colorFragments", "Mark fragments", callback=self.redrawImages)
        box.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))
        self.moleculeSmilesCombo=OWGUI.comboBox(self.controlArea, self, "moleculeSmilesAttr", "Molecule SMILES attribute",callback=self.showImages)
        self.moleculeSmilesCombo.box.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))
        self.moleculeTitleCombo=OWGUI.comboBox(self.controlArea, self, "moleculeTitleAttr", "Molecule title attribute", callback=self.redrawImages)
        self.moleculeTitleCombo.box.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))
        self.fragmentSmilesCombo=OWGUI.comboBox(self.controlArea, self, "fragmentSmilesAttr", "Fragment SMILES attribute", callback=self.updateFragmentsListBox)
        self.fragmentSmilesCombo.box.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))
        box=OWGUI.spin(self.controlArea, self, "imageSize", 50, 500, 50, box="Image size", callback=self.redrawImages)
        box.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))
        box=OWGUI.widgetBox(self.controlArea,"Selection")
        OWGUI.checkBox(box, self, "commitOnChange", "Commit on change")
        OWGUI.button(box, self, "&Select marked molecules", self.selectMarked)
        OWGUI.button(box, self, "&Commit", callback=self.commit)
        OWGUI.rubber(self.controlArea)
        
        self.mainAreaLayout=QVBoxLayout(self.mainArea, QVBoxLayout.TopToBottom)
        spliter=QSplitter(Qt.Vertical, self.mainArea)
        self.scrollView=ScrollView(self, spliter)
        self.scrollView.setHScrollBarMode(QScrollView.Auto)
        self.scrollView.setVScrollBarMode(QScrollView.Auto)
        self.molWidget=QWidget(self.scrollView.viewport())
        self.scrollView.addChild(self.molWidget)
        self.mainAreaLayout.addWidget(spliter)
        self.gridLayout=QGridLayout(self.molWidget,10,100,2,2)
        self.gridLayout.setAutoAdd(False)
        self.listBox=QListBox(spliter)
        self.connect(self.listBox, SIGNAL("highlighted(int)"), self.fragmentSelection)

        self.imageprefix=os.path.split(__file__)[0]
        if self.imageprefix:
            self.imageprefix+="\molimages\image"
        else:
            self.imageprefix="molimages\image"
        self.imageWidgets=[]
        self.candidateMolSmilesAttr=[]
        self.candidateMolTitleAttr=[None]
        self.candidateFragSmilesAttr=[None]
        self.molData=None
        self.fragData=None
        self.ctrlPressed=FALSE
        self.resize(600,600)
        self.listBox.setMaximumHeight(150)
        
    def setMoleculeTable(self, data):
        self.molData=data
        if data:
            self.setMoleculeSmilesCombo()
            self.setMoleculeTitleCombo()
            self.setFragmentSmilesCombo()
            self.updateFragmentsListBox()
            self.showImages()
        else:
            self.moleculeSmilesCombo.clear()
            self.moleculeTitleCombo.clear()
            self.defFragmentSmiles=[]
            if not self.fragmentSmilesAttr:
                self.listBox.clear()
            self.destroyImageWidgets()
            self.send("Selected Molecules", None)
            
    def setFragmentTable(self, data):
        self.fragData=data
        if data:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -