5

絵は千の言葉を描きます...:

ここに画像の説明を入力してください

私のPython2.7アプリケーションには、クリックするとメニューがポップアップするボタンがあります。

状況によっては、このリストが画面サイズよりも大きくなります。

  • Ubuntu 12.04(Gtk 3.4.2を使用)では、スクロール矢印が表示されるため、これは問題ありません(図の右側に表示されています)。

  • Ubuntu 12.10 /13.04およびFedora17(Gtk 3.6を使用)では、同じメニューが表示されますが、スクロール矢印がなく、マウスを使用して上下にスクロールできません。

奇妙な部分は、ボタンをもう一度クリックすると、スクロール矢印が再び表示されることです。

したがって、ある種のサイズ割り当ての問題のように見えます-最初のポップアップでは計算されませんが、後続のポップアップでは計算されます

したがって、私の質問

新しいGTKライブラリで明らかに何かが変わった-スクロール矢印が確実に表示されるように大きなポップアップメニューを表示する正しい方法は何ですか?

一貫した「最初のクリックで矢印を表示」できるように、異なるGTKバージョン間のこの明らかな違いにどのように取り組むべきかについてのヒントはありますか?

以下は、この問題を示す簡単なPythonテストプログラムです。

GtkParasite自体の[検査]ボタンをクリックするとすぐにポップアップが消えるため、GTKParasiteを使用してこれを診断できませんでした。

#-*-モード:python; コーディング:utf-8; タブ幅:4; インデント-タブ-モード:nil; -*-

#!/ usr / bin / env python

gi.repositoryimportGtkから

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=なし
ポップアップ=Gtk.Menu()

範囲(100)のiの場合:
    label ='アイテム%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(
            group = first_item、label = label)

    new_menu_item.show()
    popup.append(new_menu_item)
    
ボタン=Gtk.Button()
button.connect('クリック'、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()
4

2 に答える 2

2

私はドキュメントを少し閲覧しましたが、 を使用する代わりに、メニュー項目を 1 つの長い行ではなくグリッドに配置するpopup.append(new_menu_item)ことができました。popup.attach(new_menu_item, left, right, top, bottom)

ただし、スクロール可能なリストを含むウィンドウを開いた方がよいようです。

于 2013-01-21T09:05:50.553 に答える
1

GtkComboBoxTextを使用します。しかし、ptomato が言ったように、この種のプレゼンテーションは膨大な量の値のリストには適合しません。表示する値の数を減らすか、スクロールバーがあり、値を表示するために最初のクリックを必要としないGtkTreeViewを使用してください。

于 2013-01-21T09:58:04.703 に答える