代码之家  ›  专栏  ›  技术社区  ›  Ivo Wetzel

GTK/GDK如何找出一个窗口是否被另一个窗口覆盖?

  •  2
  • Ivo Wetzel  · 技术社区  · 16 年前

    我有一个gtk应用程序,它有一个托盘图标,如果用户点击图标,当他在窗口所在的工作区时,窗口的可见性就会被切换。当他在另一个工作区时,窗口会移到那个工作区。

    到目前为止我的代码是:

    def inOverlayed(self):
        windows = self.window.get_screen().get_toplevel_windows()
        win = self.window.get_window()
        x, y, w, h, b = win.get_geometry()
        for i in windows:
            if win != i:
                x2, y2, w2, h2, b2 = i.get_geometry()
                if x >= x2 and x + w <= x2 + w2:
                    if y >= y2 and y + h <= y2 + h2:
                        return True
    
        return False
    

    最大的问题是似乎没有办法确定一个windowsz级别,但是如果没有它,人们就无法区分这个窗口是在另一个窗口中,还是被另一个窗口覆盖了。

    1 回复  |  直到 16 年前
        1
  •  1
  •   ptomato    16 年前

    不能,因为z级别完全由窗口管理器决定。GDK可以向窗口管理器发送关于在堆栈中提升或降低窗口的提示,但是窗口管理器可以随意忽略它们。

    gtk.Window.is_active() ; 如果为true,则隐藏窗口,否则调用 gtk.Window.present()