fos*_*dom 5 python gtk pygobject gtk3
一幅画描绘了一千个单词...:

在我的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;indent-tabs-mode:nil; -*-
#!/ 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 =标签)
first_item = new_menu_item
其他:
new_menu_item = Gtk.RadioMenuItem.new_with_label_from_widget(
group = first_item,label = label)
new_menu_item.show()
popup.append(new_menu_item)
按钮= Gtk.Button()
button.connect('clicked',popupclick)
主箱= Gtk.Box()
mainbox.pack_start(button,True,True,0)
scroller = Gtk.ScrolledWindow()
scroller.add_with_viewport(mainbox)
window.add(scroller)
window.show_all()
Gtk.main()
使用GtkComboBoxText。但正如 ptomato 所说,这种表示方式不适合包含大量值的列表。减少要显示的值的数量,或者使用GtkTreeView,它将有一个滚动条并且不需要初始单击来显示值。
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |