2013-04-10 31 views
27

Tôi muốn biết cách tạo thông báo bật lên trên khay hệ thống bằng python. Tôi đã thấy những điều đó trong rất nhiều softaware, nhưng khó tìm được tài nguyên để làm điều đó dễ dàng với bất kỳ ngôn ngữ nào. Bất cứ ai cũng biết một số thư viện để làm điều này trong Python?Cách tạo thông báo bật lên khay hệ thống bằng python? (Windows)

Trả lời

37

Với sự giúp đỡ của pywin32 library bạn có thể sử dụng mã ví dụ sau đây tôi thấy here:

from win32api import * 
from win32gui import * 
import win32con 
import sys, os 
import struct 
import time 

class WindowsBalloonTip: 
    def __init__(self, title, msg): 
     message_map = { 
       win32con.WM_DESTROY: self.OnDestroy, 
     } 
     # Register the Window class. 
     wc = WNDCLASS() 
     hinst = wc.hInstance = GetModuleHandle(None) 
     wc.lpszClassName = "PythonTaskbar" 
     wc.lpfnWndProc = message_map # could also specify a wndproc. 
     classAtom = RegisterClass(wc) 
     # Create the Window. 
     style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU 
     self.hwnd = CreateWindow(classAtom, "Taskbar", style, \ 
       0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \ 
       0, 0, hinst, None) 
     UpdateWindow(self.hwnd) 
     iconPathName = os.path.abspath(os.path.join(sys.path[0], "balloontip.ico")) 
     icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE 
     try: 
      hicon = LoadImage(hinst, iconPathName, \ 
        win32con.IMAGE_ICON, 0, 0, icon_flags) 
     except: 
      hicon = LoadIcon(0, win32con.IDI_APPLICATION) 
     flags = NIF_ICON | NIF_MESSAGE | NIF_TIP 
     nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip") 
     Shell_NotifyIcon(NIM_ADD, nid) 
     Shell_NotifyIcon(NIM_MODIFY, \ 
         (self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,\ 
          hicon, "Balloon tooltip",msg,200,title)) 
     # self.show_balloon(title, msg) 
     time.sleep(10) 
     DestroyWindow(self.hwnd) 
    def OnDestroy(self, hwnd, msg, wparam, lparam): 
     nid = (self.hwnd, 0) 
     Shell_NotifyIcon(NIM_DELETE, nid) 
     PostQuitMessage(0) # Terminate the app. 

def balloon_tip(title, msg): 
    w=WindowsBalloonTip(title, msg) 

if __name__ == '__main__': 
    balloon_tip("Title for popup", "This is the popup's message") 
+0

trình, nhưng tôi muốn nó được nhiều hơn "hiện đại", cái nhìn khác nhau và cảm thấy. Có thể thêm hình ảnh vào cửa sổ bật lên chẳng hạn. Có thể với apprach này? –

+0

chưa thử, nhưng có thể đưa đường dẫn đến biểu tượng thay cho biểu tượngPathName có thể hoạt động –

4

Bạn sẽ cần phải sử dụng một thư viện giao diện bên python 3 hoặc thư viện PyWin32. TkInter, bộ công cụ GUI đi kèm với python không hỗ trợ pop up của khay hệ thống.

thư viện trung tính Đa dạng mà hỗ trợ làm việc với khay hệ thống:

  • wxPython
  • PyGTK
  • pyQT

Windows cụ thể thư viện mà hỗ trợ làm việc với khay hệ thống:

  • py win32

thông tin/ví dụ về khay hệ thống cửa sổ pop up sử dụng wxPython trên cửa sổ:

+0

Ok, ví dụ về cách thực hiện với wxPython? –

+1

@RomanRdgz Hãy xem [ToasterBox] (http://xoomer.virgilio.it/infinity77/main/freeware.html#toasterbox) mà tôi tìm thấy trong http://stackoverflow.com/questions/2240674/cross-platform -desktop-notifier-in-python. – halex

11

thời gian gần đây tôi đã sử dụng gói Plyer để tạo ra các thông báo cross-platform mà không đau đớn, bằng cách sử dụng Notification mặt tiền (có nhiều thứ thú vị khác đáng để xem).

Khá dễ dàng để sử dụng:

from plyer import notification 

notification.notify(
    title='Here is the title', 
    message='Here is the message', 
    app_name='Here is the application name', 
    app_icon='path/to/the/icon.png' 
) 
+0

Khi tôi sử dụng lib này, tôi gặp lỗi từ 'python27_x64 \ lib \ site-packages \ plyer \ platforms \ win \ libs \ balloontip.py ", dòng 145, trong balloon_tip', của phương thức' WindowsBalloonTip (** kwargs) ', thông báo lỗi là:' TypeError: __init __() nhận đối số từ khóa không mong muốn 'ticker''. Đó là windows7 với python 2.7. – FaithReaper

+2

... và kiểm tra repo, một vấn đề tương tự cũng đã được đăng và tác giả đề nghị cài đặt bản phát hành mới nhất trực tiếp từ Github, và giải quyết vấn đề. Tuyệt vời! 'pip install -I https://github.com/kivy/plyer/zipball/master' – FaithReaper

1

trong hệ thống Linux, bạn có thể sử dụng inbuilt lệnh notify-send.

ntfy thư viện có thể được sử dụng để gửi thông báo đẩy.

click here for ntfy documentation

cài đặt:

sudo pip install ntfy 

ví dụ:

ntfy send "your message!" 
ntfy send -t "your custom title" "your message" 
+0

Tôi sẽ thêm rằng đây là chương trình python được gọi từ dòng lệnh chứ không phải lệnh Python nội bộ – tc88

Các vấn đề liên quan