Wxpython 在工作区/虚拟桌面之间移动窗口

Wxpython 在工作区/虚拟桌面之间移动窗口,wxpython,x11,window-managers,Wxpython,X11,Window Managers,我有一个仅限Linux的wxPython应用程序,其wxFrame充当菜单/工具栏,它可以打开独立于工具栏本身的新窗口。 由于用户可以将这些窗口中的任何一个移动到任何虚拟工作区,因此我正在寻找一种方法,以便在用户激活窗口时将工具栏移动到当前工作区。 我尝试使用Raise(),但这样工具栏也会接收焦点,我不希望这样。请注意,我不能使工具栏粘滞,因为我不希望它出现在每个工作区上 谢谢 (wxpython2.8.9.1,Ubuntu 9.04) 跟进: 我检查了的源代码,看看它是如何“将窗口移动到工作

我有一个仅限Linux的wxPython应用程序,其wxFrame充当菜单/工具栏,它可以打开独立于工具栏本身的新窗口。
由于用户可以将这些窗口中的任何一个移动到任何虚拟工作区,因此我正在寻找一种方法,以便在用户激活窗口时将工具栏移动到当前工作区。
我尝试使用Raise(),但这样工具栏也会接收焦点,我不希望这样。请注意,我不能使工具栏粘滞,因为我不希望它出现在每个工作区上

谢谢

(wxpython2.8.9.1,Ubuntu 9.04)

跟进:

我检查了的源代码,看看它是如何“将窗口移动到工作区N”的。。它使用了,所以我试着用Python来做。。这是我现在的代码:

import gtk

def move_to_workspace(frame, ws):
    gdkwin = gtk.gdk.window_lookup(frame.GetHandle())
    win = gdkwin.get_user_data()
    while not isinstance(win, gtk.Window): # Find parent Window object
        win = win.get_parent()
    win.window.property_change(gtk.gdk.atom_intern("_NET_WM_DESKTOP"),
                                                        gtk.gdk.atom_intern("CARDINAL"), 32,
                                                        gtk.gdk.PROP_MODE_REPLACE,
                                                        [ws])
代码似乎有些成功,因为xprop检测到了更改:

(before execution)
$ xprop | grep WM_DESKTOP
_NET_WM_DESKTOP(CARDINAL) = 0

(after)
$xprop | grep WM_DESKTOP
_NET_WM_DESKTOP(CARDINAL) = 1
但问题是窗口没有移动到所需的工作区:/

我应该使用pythonxlib而不是pygtk吗?如果是这种情况,我如何从wxFrame(或gtk.Window,或XID)获取相应的Xlib.Window

跟进2:

使用xprop时也会发生同样的情况

$ xprop -id <id> -f _NET_WM_DESKTOP 32c -set _NET_WM_DESKTOP 1
$xprop-id-f\u NET\u WM\u DESKTOP 32c-set\u NET\u WM\u DESKTOP 1
它检测到已更改的_NET_WM_桌面,但窗口仍在那里:/然而,我注意到以下几点:

  • 窗口的图标化版本将显示在预期的工作区上
  • 如果我将窗口图标化到“源”工作区,它将消失

所以,也许我也应该向窗口管理器发送某种“刷新”消息。

最后我决定只使用它。

它有点旧,但仍然。。。 您必须调用
display的
flush
方法。在设置窗口属性并发送事件后显示
实例