我实际上正在开发一个相对复杂的 GTK+2 应用程序。
我的应用程序显然有一个主窗口;然后我需要打开一个新的“独立”窗口。
我需要将“飞行”窗口放在 * 中precise屏幕的准确位置*在顶点 of a widget(绘图区域)。
我需要将新窗口放置在屏幕的精确位置,恰好位于小部件(gtk.DrawingArea)的顶点处。
所以我想到了以下算法:
I get 顶点坐标绘图区域(相对于父窗口);
然后,我转换相对坐标以获得绝对坐标在屏幕上;
最后,我可以简单地将窗口移动到屏幕上所需的位置,即 gtk.DrawingArea 的顶点。
这样对吗?
不幸的是,我无法将这个算法翻译成代码。
附注我正在与Python 2.7 and Gtk+2.24;尽管如此,C/C++ 示例也很受欢迎。
我不确定这是否是你想要的,尝试一下:
#!/usr/bin/env python3
from gi.repository import Gtk
class Demo:
def __init__(self):
self.window = Gtk.Window()
self.window.set_title('Demo')
self.window.set_default_size(300, 300)
self.window.set_border_width(5)
self.window.connect('delete-event', self.on_app_exit)
hbox = Gtk.Box()
hbox.set_halign(Gtk.Align.CENTER)
hbox.set_valign(Gtk.Align.CENTER)
self.window.add(hbox)
da = Gtk.DrawingArea()
da.set_size_request(100, 100)
hbox.pack_start(da, False, False, 5)
button = Gtk.Button('Show')
button.connect('clicked', self.on_button_clicked, da)
hbox.pack_start(button, False, False, 5)
self.second_win = Gtk.Window()
self.second_win.set_title('flying window')
# You may also want to remove window decoration.
#self.second_win.set_decorated(False)
label = Gtk.Label('second window')
self.second_win.add(label)
def run(self):
self.window.show_all()
Gtk.main()
def on_app_exit(self, widget, event=None):
Gtk.main_quit()
def on_button_clicked(self, button, da):
allocation = da.get_allocation()
self.second_win.set_default_size(allocation.width,
allocation.height)
pos = self.window.get_position()
self.second_win.move(pos[0] + allocation.x, pos[1] + allocation.y)
self.second_win.show_all()
if __name__ == '__main__':
demo = Demo()
demo.run()
以及截图:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)