2011-07-07 11 views
9

私はまだPythonを初めて使い慣れていて、数ヶ月間学習していますが、私が理解しようとしていることは、基本的なウィンドウがあると言うことです...PyGTKを使用したPythonの右クリックメニュー

#!/usr/bin/env python 

import sys, os 
import pygtk, gtk, gobject 

class app: 

    def __init__(self): 
    window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    window.set_title("TestApp") 
    window.set_default_size(320, 240) 
    window.connect("destroy", gtk.main_quit) 
    window.show_all() 

app() 
gtk.main() 

私はこのウィンドウ内を右クリックして、警告、コピー、終了などのメニューをポップアップしたいと思います。

どうすれば達成できますか?

+0

まず、GTKのイベント利用状況をお読みください。まず何かをするために右クリックしてから、コンテキストメニューの操作方法を読んでください。 PyGTKやGTKを使ったことは一度もありませんが、おそらくウィジェットがあります。 – JAB

答えて

12

http://www.pygtk.org/pygtk2tutorial/sec-ManualMenuExample.html

で発見、この非常に事を行うための例では、それは、メニューバーに添付しても、マウスボタンのクリックイベントをリッスンし、その非常に同じメニューをポップアップメニューを作成する方法を示しますがあります作成されました。

私はこれがあなたの後であると思います。

EDITは:

は、要約すると(のみマウスの右ボタンイベントに応答する方法を示すために、更なる説明を追加します)。

マウスイベントを待機するウィジェットを作成します。この場合はボタンです。

button = gtk.Button("A Button") 

メニューを作成します

menu = gtk.Menu() 

メニュー項目

menu_item = gtk.MenuItem("A menu item") 
menu.append(menu_item) 
menu_item.show() 

でそれを埋めるウィジェットがそれにメニューを取り付け、マウスプレスイベントをリッスンしてください。

button.connect_object("event", self.button_press, menu) 

これらのイベントを処理するメソッドを定義します。リンクの例で説明したように、このメソッドに渡されるウィジェットは、これらのイベントをリスンするウィジェットではなくポップアップするメニューです。

def button_press(self, widget, event): 
    if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: 
     #make widget popup 
     widget.popup(None, None, None, event.button, event.time) 
     pass 

あなたはそれが本当であれば、それはその後、押されたボタンのどれかをチェックし、ボタンが押された場合の文チェックを参照してください場合ていることがわかります。 event.buttonは、どのマウスボタンが押されたかを表す整数値です。したがって、1は左ボタン、2は中央、3は右マウスボタンです。 event.buttonが3であるかどうかを調べることによって、マウスの右ボタンに対するマウスの押下イベントにのみ応答します。

+0

ありがとう!それは私が把握しようとしてきたものとほとんど正確です。メニューは左クリックだけでなく右にも表示されますが、問題はありません。私はそれを左クリックで表示したくないが、私はそれを修正できるはずだ。ありがとう! –

+0

@ mikethedj4:ポップアップメニューをトリガするクリックを定義するために達成したかどうかを教えてください。ありがとう。 – Benjamin

+1

@ベンジャミン:答えは今あなたが何をカバーしているはずだと思います。 –

関連する問題