一张图画一千个字……:
在我的 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()