70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
# 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(...)
|
|
|
|
|
|
|
|
|