2011-01-13 29 views
1

GLUTを使用してPython(v2.7)プログラムで右クリックポップアップメニューを作成しようとしています。これを行うためのPython固有のドキュメントは見つかりませんでした。そのため、C++ドキュメントを使用しました。これは通常ほぼ似ています。ここでPython-OpenGLでGLUTポップアップメニューを作成する

は、私が持っているものです。

def createMenu(): 
    menu = glutCreateMenu(processMenuEvents) 
    glutAddMenuEntry("One", 1) 
    glutAddMenuEntry("Two", 2) 
    glutAttachMenu(GLUT_RIGHT_BUTTON) 

def processMenuEvents(option): 
    logging.debug("Menu pressed") 
    # not using 'option' right now 

メニューが正しく表示されますが、私はアイテムをクリックしたとき、私はこれを取得ます:

if __name__=="__main__": 
    glutInit(sys.argv) 
    #...more initialization code... 
    createMenu() 
    init() 
    glutMainLoop() 

そしてここでは、メニューを作成する機能がありますエラー:

DEBUG:root:Menu pressed: 
Traceback (most recent call last): 
    File "_ctypes/callbacks.c", line 338, in 'converting callback result' 
TypeError: an integer is required 
Exception in <function processMenuEvents at 0x1760b90> ignored 

python-openglはこれを行う方法が異なりますか?私はここで間違って何をしていますか?

ありがとうございました。

答えて

0

Pythonでctypesを使用してコールバック関数を指定すると、期待どおりに機能しません。 CFUNCTYPEを使用してコールバック関数を作成し、結果の変数をglutCreateMenuのパラメータとして使用する必要があります。

現在のctypesとコールバック関数の詳細を見つける:http://docs.python.org/release/2.5.2/lib/ctypes-callback-functions.html

1

残念ながら、PyOpenGLは、コールバック関数を定義している方法は、それが戻り値の型ではなく、無効としてint型を期待しています。以下は動作するはずのCreateMenuコールバック関数の更新版です。

def CreateMenu(): 
    menu = glutCreateMenu(processMenuEvents) 
    glutAddMenuEntry("One", 1) 
    glutAddMenuEntry("Two", 2) 
    glutAttachMenu(GLUT_RIGHT_BUTTON) 
    # Add the following line to fix your code 
    return 0 
関連する問題