【问题标题】:What is the correct method to display a large popup menu?显示大弹出菜单的正确方法是什么?
【发布时间】: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 小部件类似于弹出式可滚动列表?

标签: python gtk gtk3 pygobject


【解决方案1】:

我浏览了一些文档,您可以使用popup.attach(new_menu_item, left, right, top, bottom) 将您的菜单项放在一个网格中而不是一条长线,而不是使用popup.append(new_menu_item)

不过,您似乎最好打开一个带有可滚动列表的窗口!

【讨论】:

    【解决方案2】:

    使用GtkComboBoxText。但正如 ptomato 所说,这种表示方式不适合包含大量值的列表。要么减少要显示的值的数量,要么使用GtkTreeView,它有一个滚动条,不需要初始点击即可显示值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2017-07-15
      • 2011-08-21
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多