如何使GNOME弹出通知居中显示?

4
在屏幕上显示一个GNOME弹出通知(使用Python),位置为(200,400):
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()函数中。

通知是否位于屏幕中央真的很重要吗?为什么不能让窗口管理器决定它应该放在哪里? - Zifre
我正在为Python工作创建一个持续测试设置,每当我修改文件时,我的项目的单元测试就会运行,并弹出一个窗口显示成功或失败。它在屏幕右下角相当无用,因为它会让我的注意力从工作中分散开来 - 我可能还不如打开一个控制台。我希望通知能够像Mac上的Growl一样潜意识地提醒我。 - Michael Gundlach
3个回答

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()

运行得很好,尽管我认为“2”后面的句号是打错了。顺便问一下,有没有办法获取通知本身的宽度,这样我就可以从屏幕中心减去一半的宽度了? - Michael Gundlach
“2” 后面的小数点是为了将它们变成浮点数,避免进行整数除法可能会导致问题。 - Adam

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]

-4

在Windows上,

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

但我似乎找不到它的Linux版本。


1
GNOME无法在Windows上运行。这个答案完全没用。 - Zifre
不适用于那些可能想在Windows下执行相同操作的人 ;) - Fusspawn
1
我不想在Windows中被病毒感染,你知道怎样用Python实现这个吗? - Kredns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接