swolfe2
swolfe2

Reputation: 451

Run .py file in system tray rather than in taskbar window

I have a .py file that runs via Task Scheduler when I log into my computer, and it's constantly listening for specific keyboard events to happen. Rather than having it run in the Python Console window on the Taskbar, I'd like to get it to run in the system tray with a Python icon to make it more clean.

I have discovered the pysystray library, and can successfully make a Python icon in the system tray with a right-click menu which will allow me to quit the icon.

from os import path as path

import PIL.Image
import pystray


def on_clicked(icon, item):
    if str(item) == "Quit":
        icon.stop()


dir_path = path.dirname(path.realpath(__file__))

icon_image = "\\Icon\\Python.ico"

full_path = dir_path + icon_image
    
image = PIL.Image.open(full_path)

icon = pystray.Icon(
    "Testing",
    image,
    menu=pystray.Menu(pystray.MenuItem("Quit", on_clicked)),
)

icon.run()

However, I can't figure out how to get my existing Python file to run under the icon. It seems like there are two separate events happening; one for launching the icon, and another for running the rest of the code. I would want to make sure that if the "Quit" option is chosen, then the .py file would also stop.

Also, it would be really helpful to have a separate right-click menu item which will display either Python cmd line text since it's constantly being overwritten in my main .py file with a print statement.

Any help/insight would be really appreciated!

Upvotes: 1

Views: 689

Answers (1)

JohnAlexINL
JohnAlexINL

Reputation: 626

The pystray.run function accepts an optional callback function as a parameter. The callback function is run in a separate thread and should be closed normally by ln 9: icon.stop().

Upvotes: 1

Related Questions