python-wnck将焦点设置为窗口

时间:2013-07-21 21:12:56

标签: python wnck

我正在尝试使用python-wnck将焦点设置到窗口。
我能找到的与此库相关的唯一文档来自https://developer.gnome.org/libwnck/stable/WnckWindow.html

使用我在SO上的另一个问题上找到的一些代码,我能够使用窗口标题搜索窗口,但我不确定如何让窗口聚焦。
从上面的文档中我发现了函数:

wnck_window_activate(WnckWindow *window, guint32 timestamp);


所以在python中我尝试使用像“window.activate(0)”这样的函数,但这似乎失败了,我的任务栏上的图标闪烁但是它没有得到焦点。
在终端我收到消息:

 (windowTest.py:17485): Wnck-WARNING: Received a timestamp of 0; window activation may not function properly

所以我认为我可能确实需要输入一个有效的时间戳,但不知道如何获得这个。

这是使用sofar的代码:

import pygtk
pygtk.require('2.0')
import gtk
import wnck
import re
import sys

screen = wnck.screen_get_default()
while gtk.events_pending():
    gtk.main_iteration()

titlePattern = re.compile('.*Geany.*')

windows = screen.get_windows()
for w in windows:
  if titlePattern.match(w.get_name()):
    print w.get_name()
    w.activate(0)

2 个答案:

答案 0 :(得分:0)

解决方案实际上很简单,我只需要“导入时间”然后将“int(time.time())”传递给激活函数

工作代码:

import pygtk
pygtk.require('2.0')
import gtk
import wnck
import re
import sys
import time

screen = wnck.screen_get_default()
while gtk.events_pending():
    gtk.main_iteration()

titlePattern = re.compile('.*Geany.*')

windows = screen.get_windows()
for w in windows:
  if titlePattern.match(w.get_name()):
    print w.get_name()
    w.activate(int(time.time()))

答案 1 :(得分:0)

要远离Wnck-WARNING,您需要使用w.activate()功能发送有效时间戳。我发现这样做的方法是使用:

  

now = gtk.gdk.x11_get_server_time(gtk.gdk.get_default_root_window())

     

w.activate(现在)

确实应该有一种更简单的方法,或者wnck应该允许0的时间戳与大多数gtk库一样使用now