一张图片描绘了千言万语......:
在我的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上的“Inspect”按钮,弹出窗口就会消失。
# -*- Mode: python; coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*- #!/usr/bin/env python from gi.repository import Gtk def popupclick(self, *args): popup.popup(None, None, None, None, 0, Gtk.get_current_event_time()) window = Gtk.Window() window.connect('delete_event', Gtk.main_quit) window.set_default_size(200,200) first_item = None popup = Gtk.Menu() for i in range(100): label = 'Item %d' % i if not first_item: new_menu_item = Gtk.RadioMenuItem(label=label) first_item = new_menu_item else: new_menu_item = Gtk.RadioMenuItem.new_with_label_from_widget( group=first_item, label=label) new_menu_item.show() popup.append(new_menu_item) button = Gtk.Button() button.connect('clicked', popupclick) mainbox = 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()
答案 0 :(得分:2)
我在文档中浏览了一下,而不是使用popup.append(new_menu_item)
,您可以使用popup.attach(new_menu_item, left, right, top, bottom)
将菜单项放在网格中而不是一条长行。
但是看起来你打开一个带有可滚动列表的窗口会更好!
答案 1 :(得分:1)
使用GtkComboBoxText。但正如ptomato所说,这种表述并不适用于大量价值观的清单。要么减少要显示的值的数量,要么使用GtkTreeView,它将有一个滚动条,并且不需要初始点击来显示值。