2011-08-22 15 views
7

मैं सिर्फ एक अच्छा, छोटे स्क्रिप्ट pynotify के माध्यम से सूक्ति-सूचनाएं, इस तरह का उपयोग करता है अजगर के साथ शुरू किया और लिखा था अपने आप को:एक अप्रचलित पिनोटिफ़ाई अधिसूचना को कैसे हटाएं?

import pynotify 

pynotify.init("Application") 
alert = pynotify.Notification("Title", "Description") 
alert.show(); 

यह अच्छा काम करता है, लेकिन बात यह है कि जब मैं स्क्रिप्ट में दो बार निष्पादित एक पंक्ति में पहली अधिसूचना दूर जाने में कुछ समय लगता है। दूसरा उसके बाद दिखाया जाता है। चूंकि जब मैं दूसरी बार स्क्रिप्ट निष्पादित करता हूं तो पहला अप्रचलित होता है, इसलिए मैं दूसरे को दिखाने (या इसे बदलने) से पहले प्रोग्रामेटिक रूप से पहले को हटाना चाहता हूं। क्या यह संभव है, और यदि यह है, तो कैसे?

मुझे समझने के लिए थोड़ा सा संदर्भ क्यों है कि मुझे इसकी आवश्यकता क्यों है: चूंकि मैं अक्सर अपने माउस को बाएं से दाएं हाथ से स्विच करता हूं और दूसरी तरफ, मुझे एक ऐसी स्क्रिप्ट चाहिए जो सिर्फ इस वरीयता को बदल देती है और मुझे अधिसूचना में बताती है " बाएं हाथ में स्विच "और" दाएं हाथ से स्विच "।

उत्तर

6

मैंने थोड़ी देर के लिए खोज की और इस निष्कर्ष पर पहुंचा कि इस मामले में संभव नहीं है।

आप मौजूदा अधिसूचना ऑब्जेक्ट को अद्यतन करने के लिए Notification.update() का उपयोग करने में सक्षम हैं। लेकिन आप मौजूदा लोगों को सिस्टम से संशोधित या छिपाने के लिए क्वेरी नहीं कर सकते हैं। ऑब्जेक्ट को सीरियलाइजेशन के माध्यम से कहीं स्टोर करना संभव है और इसे अपडेट करने के लिए पुनर्स्थापित करना संभव हो सकता है। लेकिन फिर भी आपको अधिसूचना की सटीक अवधि और टाइमस्टैम्प को लॉन्च करते समय जानना होगा, क्योंकि यह जांचने का कोई तरीका नहीं है कि कोई सूचना अभी भी दिखाई दे रही है या नहीं।

update() का उपयोग करने के लिए एक संक्षिप्त नमूना। बस में संदर्भ के लिए, मेरे लिए के बाद से pynotify डॉक लगभग न के बराबर लगता है:

#!/usr/bin/env python 

import pynotify 

pynotify.init("MyApplication") 

a = pynotify.Notification("Test notification", "Lorem ipsum op") 
a.show() 
raw_input("Press return to update the notification") 
a.update("Updated notification", "Ipsum lorem still op") 
a.show() 

के लिए नई जानकारी के बाद show() कॉल करनी होगी। अन्यथा परिवर्तन प्रदर्शित नहीं होंगे।

अधिसूचना ऑब्जेक्ट में एक करीबी() फ़ंक्शन भी है, लेकिन यह मेरे लिए कुछ भी नहीं करता है (लिनक्स/जीनोम पर, सिस्टम निर्भर हो सकता है)।