【问题标题】:python-wnck set focus to windowpython-wnck 将焦点设置到窗口
【发布时间】:2013-07-21 21:12:55
【问题描述】:

我正在尝试使用 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

所以我想我实际上可能需要输入一个有效的时间戳,但不知道如何获得它。

这是我目前使用的代码:

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)

【问题讨论】:

    标签: python wnck


    【解决方案1】:

    解决方案其实很简单
    我只需要“导入时间”然后将“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()))
    

    【讨论】:

    • 'w.activate(int(time.time()))' 不是你想要的。我认为“时间戳”应该是由“激活(时间戳)”调用返回的。还是我错过了什么?
    • 好吧,我还是很困惑。我看到这是一个已报告的错误等,但我的情况似乎恰恰相反。输入时间戳会导致我的应用程序无法将焦点放在窗口上,并导致 Alt-tab 什么也不做。但是输入 (0) 使它工作,除了仍然有警告(在终端窗口中)。
    【解决方案2】:

    要摆脱Wnck-WARNING,您需要使用w.activate() 函数发送一个有效的时间戳。我发现这样做的方法是使用:

    现在 = gtk.gdk.x11_get_server_time(gtk.gdk.get_default_root_window())

    w.activate(现在)

    确实应该有一种更简单的方法来做到这一点,或者wnck 应该允许0 的时间戳表示now,就像大多数gtk 库使用的那样。

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      相关资源
      最近更新 更多