python中wx将图标显示在右下角的脚本代码


Posted in Python onMarch 08, 2013
import wx 
import images
class DemoTaskBarIcon(wx.TaskBarIcon):
    TBMENU_RESTORE = wx.NewId()
    TBMENU_CLOSE   = wx.NewId()
    TBMENU_CHANGE  = wx.NewId()
    TBMENU_REMOVE  = wx.NewId()    def __init__(self, frame):
        wx.TaskBarIcon.__init__(self)
        self.frame = frame

        # Set the image
        icon = self.MakeIcon(images.getWXPdemoImage())
        self.SetIcon(icon, "wxPython Demo")
        self.imgidx = 1
        # bind some events
        self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarActivate)
        self.Bind(wx.EVT_MENU, self.OnTaskBarActivate, id=self.TBMENU_RESTORE)
        self.Bind(wx.EVT_MENU, self.OnTaskBarClose, id=self.TBMENU_CLOSE)
        self.Bind(wx.EVT_MENU, self.OnTaskBarChange, id=self.TBMENU_CHANGE)
        self.Bind(wx.EVT_MENU, self.OnTaskBarRemove, id=self.TBMENU_REMOVE)

    def CreatePopupMenu(self):
        """
        This method is called by the base class when it needs to popup
        the menu for the default EVT_RIGHT_DOWN event.  Just create
        the menu how you want it and return it from this function,
        the base class takes care of the rest.
        """
        menu = wx.Menu()
        menu.Append(self.TBMENU_RESTORE, "Restore wxPython Demo")
        menu.Append(self.TBMENU_CLOSE,   "Close wxPython Demo")
        menu.AppendSeparator()
        menu.Append(self.TBMENU_CHANGE, "Change the TB Icon")
        menu.Append(self.TBMENU_REMOVE, "Remove the TB Icon")
        return menu

    def MakeIcon(self, img):
        """
        The various platforms have different requirements for the
        icon size...
        """
        if "wxMSW" in wx.PlatformInfo:
            img = img.Scale(16, 16)
        elif "wxGTK" in wx.PlatformInfo:
            img = img.Scale(22, 22)
        # wxMac can be any size upto 128x128, so leave the source img alone....
        icon = wx.IconFromBitmap(img.ConvertToBitmap() )
        return icon
    
    def OnTaskBarActivate(self, evt):
        if self.frame.IsIconized():
            self.frame.Iconize(False)
        if not self.frame.IsShown():
            self.frame.Show(True)
        self.frame.Raise()

    def OnTaskBarClose(self, evt):
        self.frame.Close()

    def OnTaskBarChange(self, evt):
        names = [ "WXPdemo", "Mondrian", "Pencil", "Carrot" ]                  
        name = names[self.imgidx]
        getFunc = getattr(images, "get%sImage" % name)
        self.imgidx += 1
        if self.imgidx >= len(names):
            self.imgidx = 0
        icon = self.MakeIcon(getFunc())
        self.SetIcon(icon, "This is a new icon: " + name)

    def OnTaskBarRemove(self, evt):
        self.RemoveIcon()

class MyFrame(wx.Frame): 
    def __init__(self): 
        wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300)) 
        panel = wx.Panel(self, -1) 
        panel.Bind(wx.EVT_MOTION,  self.OnMove) 
        wx.StaticText(panel, -1, "Pos:", pos=(10, 12)) 
        self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40, 10)) 
     try:
            self.tbicon = DemoTaskBarIcon(self)
        except:
            self.tbicon = None
        #wx.CallAfter(self.ShowTip)
        #self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
        #self.Bind(wx.EVT_ICONIZE, self.OnIconfiy)
    def OnCloseWindow(self, event):
        self.dying = True
        self.demoPage = None
        self.codePage = None
        self.mainmenu = None
        if self.tbicon is not None:
            self.tbicon.Destroy()
        self.Destroy()
    def OnIconfiy(self, evt):
        wx.LogMessage("OnIconfiy: %s" % evt.Iconized())
        evt.Skip()
    def OnMove(self, event): 
        pos = event.GetPosition() 
        self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y)) 
if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = MyFrame() 
    frame.Show(True) 
    app.MainLoop()
Python 相关文章推荐
python自定义解析简单xml格式文件的方法
May 11 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
Django中提供的6种缓存方式详解
Aug 05 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
Python logging模块handlers用法详解
Aug 14 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
python中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 #Python
python中关于日期时间处理的问答集锦
Mar 08 #Python
python局部赋值的规则
Mar 07 #Python
Python 用户登录验证的小例子
Mar 06 #Python
Eclipse + Python 的安装与配置流程
Mar 05 #Python
python将html转成PDF的实现代码(包含中文)
Mar 04 #Python
python发送邮件的实例代码(支持html、图片、附件)
Mar 04 #Python
You might like
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
php程序内部post数据的方法
2015/03/31 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
python的socket编程入门
2018/01/29 Python
python pygame模块编写飞机大战
2018/11/20 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
警校毕业生自我评价
2014/04/06 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
毕业生实习证明
2014/09/19 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
扬州个园导游词
2015/02/06 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
宣传委员竞选稿
2015/11/19 职场文书
2016国庆促销广告语
2016/01/28 职场文书
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang