一张图画一千个字……:

在我的 Python 2.7 应用程序中,我有一个按钮,单击该按钮会弹出一个菜单。
在某些情况下,此列表大于屏幕大小。
在 Ubuntu 12.04(使用 Gtk 3.4.2)中这没问题,因为您会看到滚动箭头(如图片右侧所示)。
在 Ubuntu 12.10/13.04 和 Fedora 17(使用 Gtk 3.6)中,我得到了相同的菜单,但没有滚动箭头,并且您无法使用鼠标向上或向下滚动。
奇怪的是,如果我再次单击该按钮 - 滚动箭头会再次出现。
所以它看起来像某种大小分配问题 - 它不是在第一个弹出窗口中计算的,而是在随后的弹出窗口中计算的
因此我的问题
较新的 GTK 库显然发生了一些变化——现在显示大弹出菜单以确保显示滚动箭头的正确方法是什么?
任何提示我应该如何解决不同 GTK 版本之间的这种明显差异,以便我可以获得一致的“第一次点击时显示箭头”?
下面是一个演示此问题的简单 python 测试程序。
我无法使用 GTKParasite 来诊断此问题,因为一旦您单击 GtkParasite 本身的“检查”按钮,弹出窗口就会消失。
# -*- 模式:python;编码:utf-8;制表符宽度:4;缩进制表模式:无;-*-
#!/usr/bin/env python
从 gi.repository 导入 Gtk
def popupclick(self, *args):
popup.popup(无,无,无,无,0,
Gtk.get_current_event_time())
窗口 = Gtk.Window()
window.connect('delete_event', Gtk.main_quit)
window.set_default_size(200,200)
first_item = 无
弹出 = Gtk.Menu()
对于范围内的我(100):
标签 = '项目 %d' % i
如果不是 first_item:
new_menu_item = Gtk.RadioMenuItem(label=label)
first_item = new_menu_item
别的:
new_menu_item = Gtk.RadioMenuItem.new_with_label_from_widget(
组=第一项,标签=标签)
new_menu_item.show()
popup.append(new_menu_item)
按钮 = Gtk.Button()
button.connect('点击', popupclick)
主机箱 = Gtk.Box()
mainbox.pack_start(按钮,真,真,0)
滚动条 = Gtk.ScrolledWindow()
scroller.add_with_viewport(mainbox)
window.add(滚动条)
window.show_all()
gtk.main()