set_attached_to
似乎是在Wayland中相对于小部件放置弹出窗口的正确方法:
例如,指定此关系有用的地方的示例是[...]由Gtk创建的完成弹出窗口。条目[...]
不幸的是,这只会产生一个错误
Gdk消息:12:13:16.143:窗口0x1822340是一个没有父窗口的临时窗口,应用程序将无法在屏幕上定位它。
尝试取消对popup.set_parent(entry)
行的注释只会添加警告:
(try_entry_popup.py:4539):Gtk警告**:12:17:34.185:无法在顶级窗口小部件上设置父项
后面是相同的错误。
这是一个最小的示例:
#!/usr/bin/env python
# stripped down from https://gitlab.gnome.org/GNOME/gtk/issues/1541#note_396391
import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk
entry = Gtk.Entry()
popup = Gtk.Window(type=Gtk.WindowType.POPUP)
#popup.set_parent(entry)
popup.set_attached_to(entry)
popup.show_all()
layout = Gtk.VBox()
layout.pack_start(entry,False,True,0)
window = Gtk.Window()
window.connect("destroy",Gtk.main_quit)
window.add(layout)
window.show_all()
Gtk.main()
从entry completion source看来,它肯定应该可以工作。 是否使用私有功能?还是我想念什么?