在gtk.widget下创建gtk.window
我想在一个gtk.widget下面显示一个gtk.Window。
但是我不知道怎么获取这个gtk.widget的位置坐标来放我的gtk.window。
有人知道吗?
谢谢。
1 个回答
0
你可以使用 gtk.Widget 的 "window" 属性来获取与之关联的 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()