【发布时间】:2013-01-03 15:24:20
【问题描述】:
一张图描绘一千个字……:
在我的 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()【问题讨论】:
-
翻转答案:不要那样做,这是用户体验的噩梦;-)
-
@ptomato - 嗯 - 关于替代 GTK 友好小部件的任何想法以“弹出”可以包含很多选择的东西 - 我不喜欢从头开始编写大量代码 - 希望我可以“借用”一些GPL2/3 小部件类似于弹出式可滚动列表?