27
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

tkinterでタスクトレイに常駐させたいそこのあなた。諦めてwxPythonを使って幸せになろう

Posted at

概要

まぁtkinterに固執してたのは私なんですが。

パッケージを追加したくないという理由でtkinterにこだわってタスクトレイに常駐させる方法を探してましたが、どうにも無理そうだったのでwxPythonを使ってみたところあっさりうまくいきました。

まだtkinterで作り込んでいないならサクッと切り替えることをおすすめします。

環境

Windows7 64bit
Python 3.6.5
wxPython==4.0.2

準備

パッケージインストール

pip install wxPython

実データ

フォルダ構成

root/
 ├ gui.py
 ├ main.py
 ├ logo.ico # 今回はgoogleのGマークにしました

コード

gui.py

import wx
import wx.adv

TRAY_TOOLTIP = 'test app'
TRAY_ICON = 'logo.ico'

def create_menu_item(menu, label, func):
    item = wx.MenuItem(menu, -1, label)
    menu.Bind(wx.EVT_MENU, func, id=item.GetId())
    menu.AppendItem(item)

    return item

def open_site():
    print("open site.")
    pass
    # import webbrowser
    # webbrowser.open_new(r"https://www.google.com/")


class TaskBarIcon(wx.adv.TaskBarIcon):

    def __init__(self, frame):
        self.frame = frame
        super(TaskBarIcon, self).__init__()
        self.set_icon(TRAY_ICON)
        self.Bind(wx.adv.EVT_TASKBAR_LEFT_DCLICK, self.on_open_site)

    def CreatePopupMenu(self):
        menu = wx.Menu()
        create_menu_item(menu, 'Open Site', self.on_open_site)
        menu.AppendSeparator()
        create_menu_item(menu, 'Exit', self.on_exit)

        return menu

    def set_icon(self, path):
        icon = wx.Icon(wx.Bitmap(path))
        self.SetIcon(icon, TRAY_TOOLTIP)

    def on_open_site(self, event):
        open_site()

    def on_exit(self, event):
        print('exit')
        wx.CallAfter(self.Destroy)
        self.frame.Close()


class App(wx.App):

    def OnInit(self):
        frame=wx.Frame(None)
        self.SetTopWindow(frame)
        TaskBarIcon(frame)

        print('launch App')
        return True

main.py

if __name__ == "__main__":
    import gui
    app = gui.App(False)
    app.MainLoop()

結果

tasktray.gif

余談

windowsの右下の領域は日本語でタスクトレイ、通知領域、はたまた英語ではsystem tray、task trayなどと呼ばれるので、その呼び名 x パッケージの数だけ検索をかけないと最適解が得られないのはなかなかに辛い。

参考

27
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?