Frequently asked question ------------------------- How do I use *pystray* in a *virtualenv* on *Linux*? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ On *Linux*, runtime introspection data is required to use the *AppIndicator* backend, and the *GTK* backend may not be fully functional without installing desktop environment extensions. The *XOrg* backend will work, but it provides limited functionality. In order to use the *AppIndicator* backend, you may install the package ``PyGObject``. No wheel is provided, so the package must be built locally. On *Debian* derivatives, such as *Ubuntu*, the following packages, in addition to compilers and *pkg-config*, must be installed: - ``libcairo-dev`` - ``libgirepository1.0-dev`` I am trying to integrate with a framework, but ``run_detached`` does not work ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The ``run_detached`` method is used to allow a different framework to drive the main loop. This requires that the framework uses the same kind of mainloop. On *Windows* and *macOS*, this will be the case if you use the platform GUI toolkits. On *Linux*, the situation is a bit more complicated. Generally, the *xorg* backend will work with any toolkit, as long as you run it in an *X* session and not under *Wayland*. The *GTK* and *AppIndicator* backends will work if your toolkit is based on *GObject*. However, ``run_detached`` is strictly necessary only on *macOS*. For other platforms, it is possible to just launch the icon mainloop in a thread:: import pystray import threading import some_toolkit # Create the icon icon = pystray.Icon( 'test name', icon=create_icon()) # Run the icon mainloop in a separate thread threading.Thread(target=icon.run).start() # Run the toolkit mainlon in the main thread some_toolkit.mainloop()