создать окно gtk.window под gtk.widget - PullRequest
0 голосов
/ 24 мая 2010

Я хочу показать gtk.Window под gtk.widget.

Но я не знаю, как получить координаты gtk.widget для моего окна gtk.window.

Кто-нибудь знает?

Спасибо.

1 Ответ

0 голосов
/ 26 мая 2010

Вы можете использовать атрибут "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()
...