Hi,

I am using pymol with a wxpython interface and everything seems to work,
except when I try to change the color of an object using the internal gui,
I get a NameError: name 'util' is not defined error... can you see what is
the problem here?

Best,
Soren

Here is the script I am using:

import wx
from wx.glcanvas import GLCanvas
import OpenGL.GL as OGL
import pymol2

class PyMOLCanvas(GLCanvas):
    def __init__(self, parent):
        GLCanvas.__init__(self, parent,-1,
attribList=[wx.glcanvas.WX_GL_DOUBLEBUFFER, wx.glcanvas.WX_GL_RGBA])

        self.context = wx.glcanvas.GLContext(self)

        wx.EVT_PAINT(self, self.OnPaint)
        wx.EVT_SIZE(self, self.OnSize)
        wx.EVT_MOTION(self, self.OnMouseMotion)
        wx.EVT_RIGHT_DOWN(self, self.OnMouseDown)
        wx.EVT_RIGHT_UP(self, self.OnMouseUp)
        wx.EVT_LEFT_DOWN(self, self.OnMouseDown)
        wx.EVT_LEFT_UP(self, self.OnMouseUp)
        wx.EVT_MIDDLE_DOWN(self, self.OnMouseDown)
        wx.EVT_MIDDLE_UP(self, self.OnMouseUp)
        wx.EVT_MOUSEWHEEL(self, self.OnMouseWheel)

        self.button_map = {wx.MOUSE_BTN_LEFT:0, wx.MOUSE_BTN_MIDDLE:1,
wx.MOUSE_BTN_RIGHT:2}

        self.InitGL()
        self.LoadMolFile("C:/Programming/RAW/BSA_mono.pdb")

    def OnPaint(self, event):
        self.SetCurrent(self.context)
        width, height = self.GetSize()

        try:
            OGL.glViewport(0, 0, width, height)
            self._pymol.idle()
            self._pymol.draw()

            self.SwapBuffers()
        except Exception:
            pass

    def InitGL(self):
        self._pymol = pymol2.PyMOL()
        self._pymol.start()

        width, height = self.GetSize()
        self._pymol.reshape(width, height)

        self.PymolProcess()

    def OnSize(self, event):
        try:
            width, height = event.GetSize()
        except:
            width = event.GetSize().width
            height = event.GetSize().height

        try:
           self._pymol.reshape(width, height, True)
           self.PymolProcess()
        except AttributeError, e:
            print 'GL not init yet'

        self.Refresh()
        self.Update()

    def PymolProcess(self):
        self._pymol.idle()
        self.Refresh()
        self.Update()

    def OnMouseMotion(self, event):
        width, height = self.GetSize()

        self._pymol.drag(event.GetX(), height - event.GetY(), 0)
        self.PymolProcess()
        event.Skip()

    def OnMouseDown(self, event):
        width, height = self.GetSize()
        self._pymol.button(self.button_map[event.GetButton()], 0,
event.GetX(), height - event.GetY(), 0)
        self.PymolProcess()
        event.Skip()

    def OnMouseUp(self, event):
        width, height = self.GetSize()
        self._pymol.button(self.button_map[event.GetButton()], 1,
event.GetX(), height - event.GetY(), 0)
        self.PymolProcess()
        event.Skip()

    def OnMouseWheel(self, event):
        button = 4 if event.GetWheelRotation() > 0 else 3
        self._pymol.button(button, 0, event.GetX(), event.GetY(), 0)
        self.PymolProcess()
        event.Skip()

    def LoadMolFile(self, mol_file):
        self._pymol.cmd.load(str(mol_file))

class PyMOLPanel(wx.Panel):

    def __init__(self, parent, panel_id, name, enable_gui = False, *args,
**kwargs):
        wx.Panel.__init__(self, parent, panel_id, *args, name = name,
**kwargs)
        self._createLayout()

    def _createLayout(self):
        self.canvas = PyMOLCanvas(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas, 1, wx.ALL | wx.GROW)
        self.SetSizerAndFit(sizer)

if __name__ == '__main__':
    app = wx.App()
    frame = wx.Frame(None, -1, 'PyMol', wx.DefaultPosition,
wx.Size(400,400))
    canvas = PyMOLCanvas(frame)

    frame.Show()
    app.MainLoop()
_______________________________________________
PyMOL-users mailing list
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
Unsubscribe: 
https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe

Reply via email to