wxpython在绑定windows toast通知处理程序时出现的问题。

问题描述 投票:0回答:1

我想做一个windows 10 toast的通知,将运行代码,如果它的点击,但我的代码只显示通知,并给我一个错误,当我点击它。

import os
import wx
import wx.adv


class MyApp(wx.App):
    def OnInit(self):
        sTitle = 'test'
        sMsg = 'test'
        nmsg = wx.adv.NotificationMessage(title=sTitle, message=sMsg)
        nmsg.SetFlags(wx.ICON_INFORMATION)
        nmsg.Show(timeout=wx.adv.NotificationMessage.Timeout_Auto)
        self.Bind(wx.EVT_NOTIFICATION_MESSAGE_CLICK, self.notifclicked)
        return True
    def _notifclicked(self, evt):
        print("notification has been clicked")
app = MyApp()
app.MainLoop()

错误代码。属性错误:模块'wx'没有属性'EVT_NOTIFICATION_MESSAGE_CLICK'。

python notifications wxpython
1个回答
0
投票

不希望说肯定的是 NotificationMessage 是未完成的任务,我要建议它。

我怀疑它是基于 notifynotify2 声称支持 action 回调,但是没有。他们应该依靠 Dbus 把东西送回来,但看起来并不像,或者你必须通过跳转来实现它。(例如Dbus MainLoop的设置)

我决定稍微修改一下您的代码,只是为了展示如何添加 action 按钮,虽然它们不过是为了吸引眼球,也是为了展示我认为事件回调应该如何工作,如果它能实现的话。

当然,如果它目前确实可以工作,而我还没有研究出如何做到这一点,我会很高兴地吃掉这些文字。我是专门在Linux上写代码的,所以有这一点作为告诫。

import wx
import wx.adv

Act_Id_1 = wx.NewIdRef()
Act_Id_2 = wx.NewIdRef()

class MyFrame(wx.Frame):
    def __init__(self, parent=None, id=wx.ID_ANY, title="", size=(360,100)):
        super(MyFrame, self).__init__(parent, id, title, size)
        self.m_no = 0
        self.panel = wx.Panel(self)
        self.Mbutton = wx.Button(self.panel, wx.ID_ANY, label="Fire off a message", pos=(10,10))
        self.Bind(wx.EVT_BUTTON, self.OnFire, self.Mbutton)
        #self.Bind(wx.adv.EVT_NOTIFICATION_MESSAGE_CLICK, self._notifclicked)
        #self.Bind(wx.adv.EVT_NOTIFICATION_MESSAGE_DISMISSED, self._notifdismissed)
        #self.Bind(wx.adv.EVT_NOTIFICATION_MESSAGE_ACTION, self._notifaction, id=Act_Id_1)
        self.Show()

    def OnFire(self, event):
        self.m_no +=1
        sTitle = 'Test heading'
        sMsg = 'Test message No '
        nmsg = wx.adv.NotificationMessage(title=sTitle, message=sMsg+str(self.m_no))
        nmsg.SetFlags(wx.ICON_INFORMATION)
        nmsg.AddAction(Act_Id_1, "Cancel")
        nmsg.AddAction(Act_Id_2, "Hold")
        nmsg.Show(timeout=10)

    def _notifclicked(self, event):
        print("notification has been clicked")
    def _notifdismissed(self, event):
        print("notification dismissed")
    def _notifaction(self, event):
        print("Action")
app = wx.App()
frame = MyFrame()
app.MainLoop()
© www.soinside.com 2019 - 2024. All rights reserved.