wxPython實現windows右下角彈出框

參考了此博客的代碼: 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()
相關文章
相關標籤/搜索