2011-01-13 4 views
1

GLUT를 사용하여 Python (v2.7) 프로그램에서 오른쪽 클릭 팝업 메뉴를 만들려고합니다. 이 작업을 수행하기 위해 Python 관련 설명서를 찾지 못했기 때문에 일반적으로 거의 비슷한 C++ 설명서를 사용했습니다. 메뉴 생성 기능Python-OpenGL에서 GLUT 팝업 메뉴 만들기

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

을 그리고 여기에 있습니다 : : 여기

내가 가진 무엇 메뉴가 올바르게 표시됩니다

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 

을,하지만 난 항목을 클릭하면,이 얻을 오류 :

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 

는 파이썬 - OpenGL은이 일을 다른 방법이 있습니까? 여기서 내가 뭘 잘못하고 있니?

감사합니다.

답변

1

불행하게도, PyOpenGL는 콜백 함수를 정의한 방식, 그것은 반환 형식, 무효하지 int로 기대 :

당신이하는 ctypes 여기 콜백 함수에 대한 자세한 정보를 볼 수 있습니다. 다음은 작동해야하는 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