标签: wnck

带有框的pygtk窗口忽略所有X(鼠标)事件(传递它们)

我想做以下事情:创建一个全屏,始终在顶部pygtk窗口,其中webkit小部件显示一些html,但是有一个完全透明的框,以便下面的窗口可见.(这似乎是可能的:是否可以使用WebKit在清晰的背景上呈现Web内容?)

我想要的是(有时)将透明框中出现的所有鼠标事件传递到应用程序窗口下方的窗口,以便我可以正常地与它们进行交互.因此,不仅视觉上透明,而且对鼠标事件也是透明的.

从理论上讲,我想我可以通过pygtk Eventbox捕获我感兴趣的所有事件,使用wnck在我的正下方找到窗口,并使用python-xlib将此事件传递给它.

这似乎不是最优雅的解决方案; 有没有更好的办法?

python x11 pygtk xlib wnck

5
推荐指数
1
解决办法
654
查看次数

为什么python Wnck window.activate(int(time.time()))

这对我来说很奇怪。有人可以解释为什么 activate() 函数需要时间戳吗?99.9% 的时间不是现在或尽快或“在您方便的时候”吗?此外,如果你尝试 w.activate(0) 你会收到这个警告:

Wnck-WARNING: Received a timestamp of 0; window activation may not function properly
Run Code Online (Sandbox Code Playgroud)

我读过的有关此警告的每个论坛帖子都没有答案。但它们似乎都表明代码无法正常工作,除非您实际输入时间戳。如果你输入 (0),事情就不起作用了,你会收到警告。但是,对我来说,如果我输入时间戳,那就是事情不起作用的时候。如果我使用 (0),则程序可以正常工作,但会收到警告(仅当我在终端窗口中运行它时)。

到底为什么 activate() 关心“时间”?

只有我觉得这很疯狂吗?

python linux x11 wnck

5
推荐指数
2
解决办法
1143
查看次数

如何测试是否已创建GTK +对话框?

我用Wnck来检查是否已经创建了一个窗口:

    screen = Wnck.Screen.get_default()
    screen.force_update()  # recommended per Wnck documentation
    window_list = screen.get_windows()

    for window in window_list:
        print(window.get_name())
        if window.has_name():
            if window.get_name() == self.xld_main_window.get_title():
                window_found = True
                break
    assert window_found, 'The Gtk.Window named {window_name} has not been found.'\
        .format(window_name=self.xld_main_window.get_title())

    # clean up Wnck (saves resources, check documentation)
    window = None
    screen = None
Run Code Online (Sandbox Code Playgroud)

但是,由于对话框没有显示在任务列表中,我无法找到它们.检查它们是否显示(以及模态/非模态)的适当方法是什么?

python testing dialog wnck gtk3

5
推荐指数
1
解决办法
373
查看次数

设置 WM_CLASS(使用 wnck、xprop 或其他)

我正在尝试将多个 Chrome 独立窗口分组到 Ubuntu 14.04 中的同一启动器下。似乎不可能简单地WM_CLASS在 .desktop 文件中指定多个变量(请参阅对此答案的评论)。

我想到的第一个解决方案是在短暂的延迟后使用 xprop 将额外窗口的 WM_CLASS 更改为与所选主窗口相同。如果我没有在命令行指定要更改的窗口,让它给我一个十字准线,然后使用如下命令单击任性的窗口,则此方法有效:

xprop -f WM_CLASS 8s -set WM_CLASS crx_kphgejagakmceapfinpoopapfdnkkepf
Run Code Online (Sandbox Code Playgroud)

(在对同一问题的回答中没有太多理解)

它获得新的WM_CLASS,Ubuntu 立即将其重新组合到所选的启动器而不是 Chrome 下。

然而,尽管所有外观的窗口都具有非常简单的名称Todoist(这是标题栏上显示的名称,并xprop | grep -i name给出

WM_NAME(UTF8_STRING) = "Todoist"
_NET_WM_NAME(UTF8_STRING) = "Todoist"
WM_LOCALE_NAME(STRING) = "en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

所以,我认为 xprop 不可信。

相反,我发现我可以使用 python 包 wnck 来访问这个窗口,方式如下:

import wnck
todoist = [w for w in wnck.screen.get_defaults().get_windows()
           if 'todoist' in w.get_name().lower()][0]
Run Code Online (Sandbox Code Playgroud)

那么,我如何使用这个对象todoist来改变底层WM_CLASS呢?

我意识到这完全是一个 xy 问题,因此我对完全不同的方法持开放态度。

python launcher wnck

4
推荐指数
1
解决办法
6641
查看次数

如何使用 PyGI 使用 Wnck 获取窗口列表?

我刚开始使用 PyGI(在 Ubuntu Natty 上),尽管我以前从未使用过 pygtk。不过,我在 wxPython 程序中使用过 wnck,获取当前打开的窗口列表很容易。在 PyGI 中,窗口列表始终为空。相关代码位:

from gi.repository import Gtk, Wnck

while Gtk.events_pending():
    Gtk.main_iteration()
#... in my app class...
    screen = Wnck.Screen.get_default()
    wins = screen.get_windows()
Run Code Online (Sandbox Code Playgroud)

与此,wins == []。谢谢!

python gtk pygtk pygobject wnck

3
推荐指数
1
解决办法
3123
查看次数

让WNCK使用Python 3.5吗?

我现在有一个项目,正在使用WNCK查找打开的窗口的位置并对其进行聚焦。我最近添加了需要Python 3.5的功能,但WNCK仅在Python 2.7或我安装的任何版本上均可使用。当运行python3 stuff.py时,我得到

ImportError:没有名为“ wnck”的模块

有谁知道我如何获得适用于Python 3的wnck库?我以前用sudo apt-get install python-wnck为python2买了它

我正在使用Ubuntu,因此如果答案是“无法正常运行WNCK,请切换到X”,请确保它不是Windows专用的解决方案

python module wnck

2
推荐指数
1
解决办法
1332
查看次数

标签 统计

python ×6

wnck ×6

pygtk ×2

x11 ×2

dialog ×1

gtk ×1

gtk3 ×1

launcher ×1

linux ×1

module ×1

pygobject ×1

testing ×1

xlib ×1