2009-04-22 3 views
4

Для отображения уведомления GNOME всплывающее на (200,400) на экране (с помощью Python):Как центрировать всплывающее уведомление GNOME?

import pynotify 

n = pynotify.Notification("This is my title", "This is my description") 
n.set_hint('x', 200) 
n.set_hint('y', 400) 
n.show() 

Я в GTK нуб. Как я могу показать это уведомление в центре экрана или в нижней части экрана?

Возможно, мой вопрос должен состоять в том, «какой фрагмент Python получает размеры экрана Linux?», И я подключу их в set_hint(), если это необходимо.

+0

Действительно ли имеет значение, если уведомление находится в центре экрана? Почему вы не можете позволить оконному менеджеру решить, куда он должен идти? – Zifre

+0

Я работаю над непрерывной настройкой тестирования для python, где каждый раз, когда я изменяю файл, выполняются модульные тесты для моего проекта, а всплывающее окно показывает успех или сбой. это довольно бесполезно в правом нижнем углу экрана, потому что он отводит глаза от моей работы - я мог бы также оставить консоль открытой. я хочу, чтобы уведомление подсознательно информировало меня, как, например, Growl на Mac. –

ответ

4

Поскольку вы используете GNOME, вот GTK способ получить разрешение экрана

import gtk.gdk 
import pynotify 

n = pynotify.Notification("This is my title", "This is my description") 
n.set_hint('x', gtk.gdk.screen_width()/2.) 
n.set_hint('y', gtk.gdk.screen_height()/2.) 
n.show() 
+0

Отлично работает, хотя я думаю, что периоды после «2» - это опечатки. Хотя я нахожусь в этом, любая идея, как получить ширину самого уведомления, поэтому я могу вычесть половину от центра экрана? –

+0

Периоды после «2» должны сделать их номерами с плавающей запятой, чтобы избежать целочисленного деления, которое может вызвать проблемы. – Adam

-4

на окнах,

 from win32api import GetSystemMetrics 
     width = GetSystemMetrics (0) 
     height = GetSystemMetrics (1) 
     print "Screen resolution = %dx%d" % (width, height) 

Я не могу показаться, чтобы найти версию Линукс для этого Тхо.

+1

GNOME не работает в Windows. Этот ответ совершенно бесполезен. – Zifre

+0

Не для тех, кто может захотеть сделать то же самое под окнами;) – Fusspawn

+0

oh и http://cygnome.sourceforge.net/ – Fusspawn

0

Немного взломать, но это работает:

from Tkinter import * 
r = Tk() 
r.withdraw() 
width, height = r.winfo_screenwidth(), r.winfo_screenheight() 

Другой вариант:

from commands import getstatusoutput 
status, output = getstatusoutput("xwininfo -root") 
width = re.compile(r"Width: (\d+)").findall(output)[0] 
height = re.compile(r"Height: (\d+)").findall(output)[0] 
Смежные вопросы