2011-08-22 23 views
7

Tôi chỉ mới bắt đầu với trăn và viết bản thân mình một kịch bản nhỏ đẹp có sử dụng gnome-thông báo qua pynotify, như thế này:Làm thế nào để loại bỏ một thông báo pynotify lỗi thời?

import pynotify 

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

này hoạt động rất tốt, nhưng vấn đề là, khi tôi thực thi kịch bản hai lần trong một hàng phải mất một lúc để thông báo đầu tiên biến mất. Thứ hai được hiển thị sau đó. Vì cái đầu tiên đã lỗi thời khi tôi thực thi kịch bản lần thứ hai, tôi muốn loại bỏ tập lệnh đầu tiên trước khi hiển thị đoạn mã thứ hai (hoặc thay thế nó). Điều này có thể, và nếu nó là, làm thế nào? Một chút ngữ cảnh để hiểu tại sao tôi cần điều này: Vì tôi thường chuyển chuột từ trái sang phải và ngược lại, tôi muốn một tập lệnh chỉ đảo ngược sở thích này và cho tôi biết trong một thông báo " chuyển sang tay trái "và" chuyển sang tay phải ".

Trả lời

6

Tôi đã tìm kiếm trong một thời gian và đi đến kết luận rằng đó là không thể trong trường hợp này.

Bạn có thể sử dụng Notification.update() để cập nhật đối tượng thông báo hiện có. Nhưng bạn không thể truy vấn những cái hiện có từ hệ thống để sửa đổi hoặc ẩn chúng. Có thể lưu trữ đối tượng ở đâu đó thông qua serialization và khôi phục nó để cập nhật. Nhưng ngay cả khi đó bạn vẫn phải biết chính xác khoảng thời gian của thông báo và dấu thời gian khi bạn khởi chạy nó, vì không có cách nào để kiểm tra xem thông báo vẫn hiển thị hay không.

Một ví dụ ngắn về cách sử dụng update(). Chỉ để tham khảo, kể từ khi doc pynotify có vẻ gần như không tồn tại với tôi:

#!/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() 

Bạn phải gọi show() sau khi cập nhật. Nếu không, các thay đổi sẽ không được hiển thị.

Ngoài ra còn có một hàm close() trong đối tượng Thông báo, nhưng điều đó không làm bất cứ điều gì đối với tôi (trên Linux/Gnome, có thể phụ thuộc hệ thống).

Các vấn đề liên quan