3

以下に示すように、ハンドラーを使用してボタンクリック時にGtkポップアップメニューを作成しようとしています:

def code_clicked(self,widget,event):
    newmenu=Gtk.Menu()
    newitem=Gtk.MenuItem('hello')
    newmenu.append(newitem)
    newitem1=Gtk.MenuItem('goodbye')
    newmenu.append(newitem1)
    newmenu.show_all()
    newmenu.popup(None,None,None,None,event.button,event.time)
    return True

メニューは表示されません。理論的には、popup の 3 番目の引数 func は、Null に設定されている場合、位置をカーソル位置に設定します。lambda x,y: (event.x,event.y,True)func を に設定すると、ポップアップ メニューがカーソルの約 100 ピクセル上に表示されるため、問題があると思います。

このメニューをカーソルでポップアップする方法を見つけたいと思います。どんな助けでも大歓迎です!

4

2 に答える 2

4

ウィンドウのルート位置が必要です。そう

        menu.popup(None, None, 
                   lambda menu, data: (event.get_root_coords()[0],
                                       event.get_root_coords()[1], True),
                   None, event.button, event.time)

ポップアップを正しい位置に配置する必要があります。ここで動作します。

Jon Black の回答については、GTK3 では質問は正しいです。http://developer.gnome.org/gtk3/3.4/GtkMenu.html#gtk-menu-popup を参照しください

于 2012-07-08T02:58:06.360 に答える
1

メニューの位置を決定するためにfuncevent.timeに渡される data パラメータとして渡します。呼び出しを次のように変更すると修正されます。

newmenu.popup(None, None, None, event.button, event.time)
于 2012-05-12T19:41:17.187 に答える