# Demonstration code for a new external gui appliction, which could be # implemented using any cross-platform Python GUI (Tkinter, wxPython, # # To get started: # # (1) Copy this file into PyMOL/modules # (or create a subdirectory with prefix and rename this file to # __init__.py inside it: "my_ext_gui/__init__.py" ) # # (2) Launch PyMOL with options that force it to use this GUI instead: # # unix: ./pymol.com -qiF -N my_ext_gui -X 100 -Y 100 -H 400 -W 400 # # win: pymolwin.exe +2 -qiF -N my_ext_gui -X 100 -Y 100 -H 400 -W 400 # (NOTE: +2 option keeps open the console window for debugging) # # # PyMOL will first import this module, and then call an __init__ # method which should fire off a thread and return, as shown below import threading def run(pymol): print("\nNow start my custom gui here...") # next step might be to import wxPython, set the pymol property, # open windows, etc. # just for kicks, let's put up some up animated content # NOTE that the PyMOL API is thread-safe, so your gui thread # can message it asynchronously while the user is able to # interact with the display window pymol.cmd.set("sweep_mode",3) pymol.cmd.rock() pymol.cmd.turn("x",180) pymol.cmd.load("$TUT/1hpv.pdb") pymol.preset.pretty("1hpv") pymol.cmd.orient() pymol.cmd.turn("y",85) pymol.cmd.zoom("all",20) pymol.cmd.orient("organic & e. N+O",animate=10) pymol.cmd.show("sticks","organic") def __init__(pymol,poll=0): t = threading.Thread(target=run,args=(pymol,)) t.setDaemon(1) t.start() # note that in order to maintain future compatibility with PyMOL, the # PyMOL object passed into __init__ should be the exclusive means by # which you access the API. Do NOT import pymol directly, since in # the future, pymol will be an object, and not available as a module. # # So store it in your GUI, and then use use as follows: # # pymol.cmd.load(...) # pymol.cmd.zoom(...) # # or perhaps: # # self.cmd = pymol.cmd # ... # self.cmd.load(...) # self.cmd.zoom(...)