Вы можете использовать атрибут "window" gtk.Widget , чтобы получить gtk.gdk.Window , связанный с ним. Затем посмотрите на метод get_origin () , чтобы получить координаты экрана.
Я полагаю, что эти координаты относятся к окну верхнего уровня (я могу ошибаться, но мой код ниже, кажется, это поддерживает). Вы можете использовать метод get_allocation () , чтобы получить координаты виджета относительно его родителя.
Я получил идею отсюда . Будьте осторожны: некоторые оконные менеджеры игнорируют любые начальные настройки для положения окна. Возможно, вы захотите посмотреть этот пост для получения дополнительной информации, но я лично не проверял это.
Вы намеревались создать еще одно окно верхнего уровня? Или всплывающее окно?
#!/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()