關於python 編寫的exe軟件 最小化到托盤的分享適用於Tk,以及打包exe后找不到wininco package的解決辦法


最近閑暇在公司寫了一個打卡程序。采用Tkinter 做了簡單的界面。Tkinter編寫界面的教程還是很多的,這里就不多說了。

開發過程中困難的,就是讓程序運行到 屏幕右下角的托盤里。網上找資料 大部分都是只言片語,我總結歸納下,分享給大家。

對於 用tkinter編寫的 gui程序,托盤運行網上 提到最多的就是 采用 winico、winIco API: tktable/winico

本人親試64位系統有效。下載winico 后 需要手動將其解壓到 python安裝目錄的tcl目錄下,這樣程序才能調用。

winic的具體信息可以查看文檔 http://www.lijiejie.com/python/winico/winico.html

我從其他人那里復制了以下總結的文字,http://www.lijiejie.com/python-winico-flash-trayicon/ 原文出處,我非常感謝這位作者。他在最后貢獻了他的源碼地址,不然我還要花很多時間研究如何調用。

  1. 使用createfrom可以直接從ico文件創建圖標資源。
  2. load命令可以從exe或dll中加載圖標資源
  3. info命令則是獲取某個句柄對應的若干圖標資源的信息:  包括編號、大小、顏色深度
  4. taskbar命令用於添加、修改、刪除托盤圖標,重要的參數包括了-callback(回調函數)、-pos(圖標資源序列號)、-text(托盤圖標的提示文本),在回調函數中,可以通過%m參數來傳遞窗口消息。

在添加托盤圖標時,可以用-callback參數指定回調函數,比如右鍵點擊彈出菜單。

簡單的代碼如下:

 

  """ 可能的鼠標事件:
    WM_MOUSEMOVE
    WM_LBUTTONDOWN
    WM_LBUTTONUP
    WM_LBUTTONDBLCLK
    WM_RBUTTONDOWN
    WM_RBUTTONUP
    WM_RBUTTONDBLCLK
    WM_MBUTTONDOWN
    WM_MBUTTONUP
    WM_MBUTTONDBLCLK"""

def menu_func(event, x, y):
if event == 'WM_RBUTTONDOWN': # 監聽右擊事件
menu.tk_popup(x, y) #彈出菜單
if event == 'WM_LBUTTONDOWN': #左 事件 還有其他的如 WM_LBUTTONDBLCLK 左雙擊
top.deiconify() #顯示主頁面


top = Tkinter.Tk()
top.tk.call('package', 'require', 'Winico')
icon = top.tk.call('winico', 'createfrom', 'xxx.ico') # 這里說一下xxx.ico 就是你要顯示在托盤上的小圖標
top.tk.call('winico', 'taskbar', 'add', icon,
'-callback', (top.register(menu_func), '%m', '%x', '%y'),
'-pos', 0,
'-text', u'打卡程序')
menu = Tkinter.Menu(top, tearoff=0)
menu.add_command(label=u'顯示主頁面', command=top.deiconify)
menu.add_command(label=u'退出', command=top.quit)


我的源碼由於公司原因不能上傳,有代碼上的問題,可以郵箱問我 andyzhang.yan@qq.com
網上還有一個模塊是 SysTrayIcon.py  托盤模塊下載地址:http://www.brunningonline.net/simon/blog/archives/SysTrayIcon.py.html

本人也嘗試用過,不過在使用過程中,從托盤還原到主界面時出現了卡死現象,個人沒有深入去解決。如果有大神嘗試,最好能分享一下如何解決 還原主界面時卡死的現象。(如果沒遇到這問題 最好也分享一下代碼,不盛感激)

關於打包后找不到 winico package的問題
本人用pyinstaller 打包exe后,運行提示找不到 winico package,個人的解決辦法是 打包時不要打包成一個文件。也就是不要有-F選項。然后再打包好的目錄中 會有一個tcl文件夾,

將winico文件夾 復制到里面就能解決問題。用py2exe的童鞋 應該也可以用這種方法解決吧。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM