1

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

したがって、実際には有効なタイムスタンプを入力する必要があるかもしれませんが、これを取得する方法がわかりません。

これはsoarを使用しているコードです:

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

2 に答える 2

0

から逃れるにWnck-WARNINGは、関数で有効なタイムスタンプを送信する必要がありw.activate() ます。これを行うことがわかった方法は、次を使用することです。

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

w.activate(今)

これを行うためのより簡単な方法が本当にあるはずです。または、ほとんどの gtk ライブラリが使用するようwnckに、タイムスタンプ0を意味するようにする必要があります。now

于 2015-01-29T03:23:30.423 に答える
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()))
于 2013-07-21T21:53:08.373 に答える