我正在使用PyGObject(Python + Gtk3)开发GUI。我注意到,如果Gtk.Entry小部件位于屏幕的上半部分,则其相应的完成菜单会显示在小部件下方,并滚动到完成列表的顶部,而如果位于下部,在屏幕的一半,完成菜单出现在小部件上方,并滚动到完成列表的底部。我不在乎相对于Gtk.Entry小部件显示菜单的位置,但是我想确保在菜单首次弹出时将菜单滚动到顶部。
我试图假装Gtk.EntryCompletion和Gtk.ListStore对象继承自Gtk.Scrollable,但它们不是。
如果要重现我认为有问题的行为,请运行以下代码,将生成的窗口拖动到屏幕底部附近,然后在输入框中键入1。
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class ExampleApp(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
# build child components
self.entry = Gtk.Entry()
self.completion = Gtk.EntryCompletion()
self.liststore = Gtk.ListStore(str)
# make parts of completion talk to each other
self.entry.set_completion(self.completion)
self.completion.set_model(self.liststore)
self.completion.set_text_column(0)
# populate completion list
for i in range(1000):
self.liststore.append([str(i)])
self.add(self.entry)
self.connect("destroy", Gtk.main_quit)
self.show_all()
Gtk.main()
if __name__ == '__main__':
win = ExampleApp()
有人知道我如何确保在首次弹出完成列表时,无论输入小部件相对于屏幕的位置如何,列表的顶部都是可见的?