gpt4 book ai didi

widget - 如何将独立窗口定位在屏幕上的确切位置?

转载 作者:行者123 更新时间:2023-12-04 18:09:54 25 4
gpt4 key购买 nike

我实际上正在开发一个相对复杂的 GTK+2 应用程序。我的应用程序显然有一个主窗口;然后我需要打开一个新的“独立”窗口。

我需要将“飞行”窗口放置在屏幕的*精确位置*,恰好小部件的顶点 (一个绘图区)。我需要将新窗口放置在屏幕的精确位置,恰好位于小部件(gtk.DrawingArea)的顶点。

所以我想到了下面的算法:

  1. 我得到绘图区域的顶点坐标(相对于父窗口);

  2. 然后,我将相对坐标转换为屏幕上的绝对坐标

  3. 最后,我可以简单地将我的窗口移动到屏幕上的所需位置,即 gtk.DrawingArea 的顶点。对吗?

不幸的是,我无法将这个算法转化为代码。附:我正在使用 Python 2.7Gtk+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()

还有截图:

Screenshot

关于widget - 如何将独立窗口定位在屏幕上的确切位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16876926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com