參考了此博客的代碼: http://blog.csdn.net/xugangjava/article/details/7478139
用wxpython實現了windows右下角彈框的功能
原博客的代碼,在我電腦上跑始終出錯,
報錯:pywintypes.error: (1461, 'GetMonitorInfo', '無效監視器句柄。')java
我修改了代碼,能夠運行了。以下:python
# -*- encoding:utf-8 -*- import wx, os, win32api from win32con import AW_ACTIVATE, AW_BLEND, AW_CENTER, AW_HIDE, AW_HOR_NEGATIVE, \ AW_HOR_POSITIVE, AW_SLIDE, AW_VER_NEGATIVE, AW_VER_POSITIVE, SPI_GETWORKAREA import win32api from ctypes import windll, c_int class Popup(wx.MiniFrame): def __init__(self, label, parent=None, title=""): wx.MiniFrame.__init__(self, parent, -1, title, wx.DefaultPosition, size=(280, 180), style=wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP) # workarea = win32api.GetMonitorInfo(1)['Work'] for monitor in win32api.EnumDisplayMonitors(): monitor_info = win32api.GetMonitorInfo(monitor[0]) if monitor_info['Flags'] == 1: break workarea = monitor_info['Work'] pos = (workarea[2] - 280, workarea[3] - 180) bg = wx.Colour(255, 255, 225) self.SetBackgroundColour(bg) self.SetPosition(pos) text = wx.StaticText(self, -1, label) # font = wx.Font(13, wx.FONTENCODING_SYSTEM, wx.NORMAL, wx.NORMAL) # text.SetFont(font) text.SetBackgroundColour(bg) flags = AW_SLIDE | AW_VER_NEGATIVE | AW_ACTIVATE windll.user32.AnimateWindow(c_int(self.GetHandle()), c_int(600), c_int(flags)) self.Refresh() self.Bind(wx.EVT_CLOSE, self.RemovePopup) def RemovePopup(self, evt=None): flags = AW_BLEND | AW_HIDE windll.user32.AnimateWindow(c_int(self.GetHandle()), c_int(600), c_int(flags)) self.Destroy() if __name__ == '__main__': app = wx.PySimpleApp() f = Popup('測試右下角彈出框\n測試右下角彈出框\n\n') f.Show() app.MainLoop()