python实现桌面托盘气泡提示

本文实例为大家分享了python实现桌面托盘气泡提示的具体代码,供大家参考,具体内容如下

# -*- encoding:utf-8 -*-
##############################
#
# 程序名:python桌面托盘气泡
# 文件名:clsBubble.py
# 功能 :实现桌面托盘气泡提示功能
# modify:by adengou 2016.1.4
# program:python3.4.4
# 适用 :windowsXP -windows10
#
##############################
import sys
import os
import struct
import time
import win32con 

from win32api import *
# Try and use XP features, so we get alpha-blending etc.
try:
 from winxpgui import *
except ImportError:
 from win32gui import * 

class PyNOTIFYICONDATA:
 _struct_format = (
 "I" # DWORD cbSize; 结构大小(字节)
 "I" # HWND hWnd; 处理消息的窗口的句柄
 "I" # UINT uID; 唯一的标识符
 "I" # UINT uFlags;
 "I" # UINT uCallbackMessage; 处理消息的窗口接收的消息
 "I" # HICON hIcon; 托盘图标句柄
 "128s" # TCHAR szTip[128]; 提示文本
 "I" # DWORD dwState; 托盘图标状态
 "I" # DWORD dwStateMask; 状态掩码
 "256s" # TCHAR szInfo[256]; 气泡提示文本
 "I" # union {
  # UINT uTimeout; 气球提示消失时间(毫秒)
  # UINT uVersion; 版本(0 for V4, 3 for V5)
  # } DUMMYUNIONNAME;
 "64s" # TCHAR szInfoTitle[64]; 气球提示标题
 "I" # DWORD dwInfoFlags; 气球提示图标
 )
 _struct = struct.Struct(_struct_format) 

 hWnd = 0
 uID = 0
 uFlags = 0
 uCallbackMessage = 0
 hIcon = 0
 szTip = ''
 dwState = 0
 dwStateMask = 0
 szInfo = ''
 uTimeoutOrVersion = 0
 szInfoTitle = ''
 dwInfoFlags = 0 

 def pack(self):
 return self._struct.pack(
  self._struct.size,
  self.hWnd,
  self.uID,
  self.uFlags,
  self.uCallbackMessage,
  self.hIcon,
  self.szTip.encode("gbk"),
  self.dwState,
  self.dwStateMask,
  self.szInfo.encode("gbk"),
  self.uTimeoutOrVersion,
  self.szInfoTitle.encode("gbk"),
  self.dwInfoFlags
 )

 def __setattr__(self, name, value):
 # avoid wrong field names
 if not hasattr(self, name):
  raise (NameError, name)
 self.__dict__[name] = value 

class MainWindow:
 def __init__(self):
 #初始化变量
 self.title =""
 self.msg =""
 self.duration=5#延时5秒
 self.hwnd =None
 self.hinst =None
 self.regOk = False
 #self.creWind()

 def creWind(self):
  # Register the Window class.
 wc = WNDCLASS()
 self.hinst = wc.hInstance = GetModuleHandle(None)
 wc.lpszClassName = "PythonTaskbarDemo" # 字符串只要有值即可,下面3处也一样
 wc.lpfnWndProc = { win32con.WM_DESTROY: self.OnDestroy } # could also specify a wndproc.
 classAtom = RegisterClass(wc)
 # Create the Window.
 style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
 self.hwnd = CreateWindow(classAtom, "Taskbar Demo", style,
  0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
  0, 0, self.hinst, None
 )
 UpdateWindow(self.hwnd)
 #
 def startBubble(self,title, msg, duration=3):

 if(self.hwnd==None):
  self.creWind()
 self.title =title
 self.msg=msg
 self.duration=duration

 iconPathName = os.path.abspath(os.path.join(sys.prefix, os.getcwd()+"\\pyc.ico"))
 icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
 try:
  hicon = LoadImage(self.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, "Balloon tooltip demo")
 try:
  Shell_NotifyIcon(NIM_ADD, nid)
 except:
  self.hwnd==None
 self.show_balloon(self.title, self.msg)

 time.sleep(self.duration)
 #ReleaseDC(self.hwnd,wc)
 #DeleteDC(wc)
 try:
  DestroyWindow(self.hwnd)
  self.hwnd==None
 except:
  return None

 def show_balloon(self, title, msg):
 # For this message I can't use the win32gui structure because
 # it doesn't declare the new, required fields

 nid = PyNOTIFYICONDATA()
 nid.hWnd = self.hwnd
 nid.uFlags = NIF_INFO 

 # type of balloon and text are random
 #nid.dwInfoFlags = NIIF_INFO
 nid.szInfo = msg[:64]
 nid.szInfoTitle = title[:256] 

 # Call the Windows function, not the wrapped one
 from ctypes import windll
 Shell_NotifyIcon = windll.shell32.Shell_NotifyIconA
 Shell_NotifyIcon(NIM_MODIFY, nid.pack()) 

 def OnDestroy(self, hwnd, msg, wparam, lparam):
 nid = (self.hwnd, 0)
 Shell_NotifyIcon(NIM_DELETE, nid)
 PostQuitMessage(0) # Terminate the app. 

if __name__=='__main__':
 msgTitle =u"您有一条短消息"
 msgContent =u"hello python"
 msgTitle =msgTitle
 bubble =MainWindow()
 bubble.startBubble(msgTitle,msgContent)
 bubble.startBubble(msgTitle,u"i'm a balloon")
 bubble.startBubble(msgTitle,u"how do u feel?")

本程序修改网上的程序,适用于WINDOWS平台,有兴趣的朋友还可以修改成最小化托盘程序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python实现桌面托盘气泡提示

    本文实例为大家分享了python实现桌面托盘气泡提示的具体代码,供大家参考,具体内容如下 # -*- encoding:utf-8 -*- ############################## # # 程序名:python桌面托盘气泡 # 文件名:clsBubble.py # 功能 :实现桌面托盘气泡提示功能 # modify:by adengou 2016.1.4 # program:python3.4.4 # 适用 :windowsXP -windows10 # ##########

  • C# Winform消息通知系统托盘气泡提示框ToolTip控件

    目录 气球状提示框的介绍和系统通知变化 消息通知的提示 ShowBalloonTip()方法及指定消息类型 NotifyIcon属性设置消息 BalloonTipIcon不同的消息类型 ToolTipText属性 ToolTip提示控件显式或主动的提示消息 一个ToolTip同时为多个控件设置提示 显式设置ToolTip 气球状提示框的介绍和系统通知变化 NotifyIcon控件表示系统右下角任务栏上的托盘图标,其ShowBalloonTip方法用于显示任务栏中一定时间的具有指定标题.消息内容和

  • python实现桌面气泡提示功能

    在写桌面软件时,通常会使用到托盘上的泡泡提示功能,让我们来看看使用python如何实现这个小功能. 一.Linux系统 在Linux上,实现一个气泡提示非常简单,使用GTK实现的pynotify模块提供了些功能,我的环境是Ubuntu,默认安装此模块,如果没有,下载源文件编译安装一个.实现代码如下: #!/usr/bin/python #coding:utf-8 import pynotify pynotify.init ("Bubble@Linux") bubble_notify =

  • Python气泡提示与标签的实现

    来更新Gui教程了!!! 今天我们讲气泡提示,就是这个样子的. 那个'这是一个气泡提示'就是气泡提示,朋友们肯定有些会'哦,原来就是这个呀.',也有些朋友会说:"这不是电脑自带的吗".这个问题在我刚学编程的时候,也是这样.比如我一开始先是学Scratch,然后目标是编一个植物大战僵尸.当我去编的时候(没学过,因为很简单,一看就懂.),以为太阳从天上掉下来的效果是编的时候不用编,而是以为自带的.结果还要涉及到什么随机数,好了,说远了- 代码上!!! import sys from PyQ

  • Python实现Windows上气泡提醒效果的方法

    本文实例讲述了Python实现Windows上气泡提醒效果的方法.分享给大家供大家参考.具体实现方法如下: # -*- encoding: gbk -*- import sys import os import struct import time import win32con from win32api import * # Try and use XP features, so we get alpha-blending etc. try: from winxpgui import * e

  • WPF气泡提示框的简单制作

    本文实例为大家分享了WPF气泡提示框的具体代码,供大家参考,具体内容如下 直接上代码 <TextBox Name="account" GotFocus="account_GotFocus" LostFocus="account_LostFocus" Style="{StaticResource LabelTextBox}" xl:ControlAttachProperty.Label="用户名:" F

  • Asp.net Mvc表单验证气泡提示效果

    本文实例为大家分享了Asp.net Mvc表单验证的制作代码,供大家参考,具体内容如下 将ASP.NET MVC或ASP.NET Core MVC的表单验证改成气泡提示: //新建一个js文件(如:jquery.validate.Bubble.js),在所有要验证的页面引用 (function ($) { $("form .field-validation-valid,form .field-validation-error") .each(function () { var tip

  • jquery.cvtooltip.js 基于jquery的气泡提示插件

    序 1.插件名cvtooltip中的cv是ChinaValue的首字母缩写,而tooltip就是提示啦. 2.适用于新功能的提示,引导用户的提示,即时类消息的提示,操作失败提示(操作成功了也没人拦着)等等等,使用css实现,不附带任何图片文件. 3.目前发现的问题,在Chorme中表现的不给力,是由于Chrome对页面的解析与IE和FF不同,导致jquery的position或者offset返回值不同. 4.该插件依然是练习之作,一人之力,错误难免. 实例演示 1.载入页面的同时,气泡提示也显示

  • JS+CSS实现一个气泡提示框

    分享一个气泡提示框,练习的技术有:(1)JS响应鼠标的事件:(2)纯CSS制作三角形. 效果这样:  这是html: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>气泡对话框</title> <script src="myBubbleTooltip.js"></script>

  • 自带气泡提示的vue校验插件(vue-verify-pop)

    本教程大家分享了自带气泡提示的vue校验插件,供大家参考,具体内容如下 安装 npm install vue-verify-pop 使用 VUE版本:1.x 必须在vue-cli生成的webpack模板环境中使用 一.在./main.js中执行全局配置 import vue from 'vue' import verify from 'vue-verify-pop' vue.use(verify) // 以下配置非必须,按你的需求来 // 配置默认校验不通过时的提示信息 verify.errMs

随机推荐