在gtk.widget下创建一个gtk.window

时间:2010-05-23 20:31:04

标签: python pygtk

我想在gtk.widget下显示一个gtk.Window。

但我不知道如何为gtk.window检索gtk.widget的坐标。

有谁知道?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用gtk.Widget的“window”属性来获取与其关联的gtk.gdk.Window。然后查看get_origin()方法以获取屏幕坐标。

这些坐标是针对顶级窗口的,我相信(我可能错了,但我的代码似乎支持这一点)。您可以使用get_allocation()方法获取小部件相对于其父级的坐标。

我明白了from here。但请注意:某些窗口管理器会忽略窗口位置的任何初始设置。您可能需要查看this post以获取更多信息,但我没有亲自查看过。

您打算创建另一个顶级窗口吗?还是一个弹出窗口?

#!/usr/bin/env python
import sys

import pygtk
import gtk

class Base:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        self.window.connect("destroy", self.on_destroy)

        self.box = gtk.VButtonBox()

        self.buttons = [
            gtk.Button("Test 1"),
            gtk.Button("Test 2"),
            gtk.Button("Test 3")
        ]

        for button in self.buttons:
            self.box.add(button)
            button.connect("clicked", self.show_coords)
            button.show()

        self.window.add(self.box)

        self.box.show()
        self.window.show()

    def show_coords(self, widget, data=None):
        print "Window coords:"
        print self.window.get_window().get_origin()
        print "Button coords:"
        print widget.get_allocation()

    def on_destroy(self, widget, data=None):
        gtk.main_quit()

    def main(self):
        gtk.main()

if __name__ == "__main__":
    base = Base()
    base.main()