ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 显示大弹出菜单的正确方法是什么?

2019-06-29 19:42:53  阅读:280  来源: 互联网

标签: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本身的“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()

解决方法:

使用GtkComboBoxText.但正如ptomato所说,这种表述不适用于大量价值观的列表.要么减少要显示的值的数量,要么使用GtkTreeView,它将具有滚动条,并且不需要初始单击来显示值.

标签:python,gtk,pygobject,gtk3
来源: https://codeday.me/bug/20190629/1329345.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有