From: Spencer B. <sb...@uc...> - 2014-04-14 08:47:01
|
I'm working on a plugin with a command line interface and a light-weight tk interface through the plugins menu. This works fine on Linux, Windows, and open-source Mac builds, but not on MacPyMol.app. Importing Tkinter causes PyMol to quit with a prompt to install X11 (but not an ImportError, as far as I can tell). If X11 is installed there are no errors, but there is not a plugins menu, so I'd rather not bother loading and initializing the Tk interface to the plugin. How can I detect whether Tk is available? I can think of two approaches, but haven't figured out the correct commands for either. (1) Check the name that pymol was started with. "MacPyMol.app" does not have Tk, while "PyMOLX11Hybrid.app" does. I'm not sure how to get the name (maybe could be guessed from sys.path?), and I know there are a lot more variants than those two available. (2) Check for the existence of the plugins menu. But this would have to be done without importing Tk and triggering the X11 check. Is there a simple way to do this I'm overlooking? Thanks, -Spencer |
From: Spencer B. <sb...@uc...> - 2014-04-17 08:21:31
|
Here's what I'm currently using. It seems to work so far. Looking through the PyMol binary I see about 50 possible names though, so it would be nice if there were a built-in way to detect X11. def hasTk(): """ Make an educated guess as to whether Tk is installed, hopefully without triggering any installation on Macs """ hasTk = True if sys.platform=="darwin": #Mac # Hack: check the path for entries containing 'X11' hasTk = any([ "X11" in p.upper() for p in sys.path]) if hasTk: try: import Tkinter except ImportError: hasTk = False return hasTk On Mon, Apr 14, 2014 at 10:46 AM, Spencer Bliven <sb...@uc...> wrote: > I'm working on a plugin with a command line interface and a light-weight > tk interface through the plugins menu. This works fine on Linux, Windows, > and open-source Mac builds, but not on MacPyMol.app. Importing Tkinter > causes PyMol to quit with a prompt to install X11 (but not an ImportError, > as far as I can tell). If X11 is installed there are no errors, but there > is not a plugins menu, so I'd rather not bother loading and initializing > the Tk interface to the plugin. > > How can I detect whether Tk is available? > > I can think of two approaches, but haven't figured out the correct > commands for either. (1) Check the name that pymol was started with. > "MacPyMol.app" does not have Tk, while "PyMOLX11Hybrid.app" does. I'm not > sure how to get the name (maybe could be guessed from sys.path?), and I > know there are a lot more variants than those two available. (2) Check for > the existence of the plugins menu. But this would have to be done without > importing Tk and triggering the X11 check. > > Is there a simple way to do this I'm overlooking? > > Thanks, > -Spencer > |
From: Spencer B. <sb...@uc...> - 2014-04-22 14:46:45
|
I just found the pymol._ext_gui property, which seems to be None if X11 is off and a positive number if X11 is present. Seeing as it's a private variable, is it ok to use this to check for X11 presence? -Spencer On Thu, Apr 17, 2014 at 10:21 AM, Spencer Bliven <sb...@uc...> wrote: > Here's what I'm currently using. It seems to work so far. Looking through > the PyMol binary I see about 50 possible names though, so it would be nice > if there were a built-in way to detect X11. > > def hasTk(): > """ Make an educated guess as to whether Tk is installed, > hopefully without triggering any installation on Macs > """ > hasTk = True > if sys.platform=="darwin": #Mac > # Hack: check the path for entries containing 'X11' > hasTk = any([ "X11" in p.upper() for p in sys.path]) > > if hasTk: > try: > import Tkinter > except ImportError: > hasTk = False > > return hasTk > > > On Mon, Apr 14, 2014 at 10:46 AM, Spencer Bliven <sb...@uc...> wrote: > >> I'm working on a plugin with a command line interface and a light-weight >> tk interface through the plugins menu. This works fine on Linux, Windows, >> and open-source Mac builds, but not on MacPyMol.app. Importing Tkinter >> causes PyMol to quit with a prompt to install X11 (but not an ImportError, >> as far as I can tell). If X11 is installed there are no errors, but there >> is not a plugins menu, so I'd rather not bother loading and initializing >> the Tk interface to the plugin. >> >> How can I detect whether Tk is available? >> >> I can think of two approaches, but haven't figured out the correct >> commands for either. (1) Check the name that pymol was started with. >> "MacPyMol.app" does not have Tk, while "PyMOLX11Hybrid.app" does. I'm not >> sure how to get the name (maybe could be guessed from sys.path?), and I >> know there are a lot more variants than those two available. (2) Check for >> the existence of the plugins menu. But this would have to be done without >> importing Tk and triggering the X11 check. >> >> Is there a simple way to do this I'm overlooking? >> >> Thanks, >> -Spencer >> > > |
From: Thomas H. <tho...@sc...> - 2014-04-23 16:54:28
|
Hi Spencer, yes it's a private variable and as such was never supposed to serve as X11 (or Tkinter) availability check... but: I would (and did) also use it, since it's the best option to check this right now. Cheers, Thomas Spencer Bliven wrote, On 04/22/14 10:46: > I just found the pymol._ext_gui property, which seems to be None if X11 > is off and a positive number if X11 is present. Seeing as it's a private > variable, is it ok to use this to check for X11 presence? > > -Spencer > > > On Thu, Apr 17, 2014 at 10:21 AM, Spencer Bliven <sb...@uc... > <mailto:sb...@uc...>> wrote: > > Here's what I'm currently using. It seems to work so far. Looking > through the PyMol binary I see about 50 possible names though, so it > would be nice if there were a built-in way to detect X11. > > def hasTk(): > """ Make an educated guess as to whether Tk is installed, > hopefully without triggering any installation on Macs > """ > hasTk = True > if sys.platform=="darwin": #Mac > # Hack: check the path for entries containing 'X11' > hasTk = any([ "X11" in p.upper() for p in sys.path]) > > if hasTk: > try: > import Tkinter > except ImportError: > hasTk = False > > return hasTk > > > On Mon, Apr 14, 2014 at 10:46 AM, Spencer Bliven <sb...@uc... > <mailto:sb...@uc...>> wrote: > > I'm working on a plugin with a command line interface and a > light-weight tk interface through the plugins menu. This works > fine on Linux, Windows, and open-source Mac builds, but not on > MacPyMol.app. Importing Tkinter causes PyMol to quit with a > prompt to install X11 (but not an ImportError, as far as I can > tell). If X11 is installed there are no errors, but there is not > a plugins menu, so I'd rather not bother loading and > initializing the Tk interface to the plugin. > > How can I detect whether Tk is available? > > I can think of two approaches, but haven't figured out the > correct commands for either. (1) Check the name that pymol was > started with. "MacPyMol.app" does not have Tk, while > "PyMOLX11Hybrid.app" does. I'm not sure how to get the name > (maybe could be guessed from sys.path?), and I know there are a > lot more variants than those two available. (2) Check for the > existence of the plugins menu. But this would have to be done > without importing Tk and triggering the X11 check. > > Is there a simple way to do this I'm overlooking? > > Thanks, > -Spencer -- Thomas Holder PyMOL Schrödinger, Inc. |