Skip to main content
 首页 » 编程设计

python之在 Python-OpenGL 中创建一个 GLUT 弹出菜单

2025年05月04日6unruledboy

我正在尝试使用 GLUT 在 Python(v2.7) 程序中创建右键单击弹出菜单。我没有找到用于执行此操作的特定于 Python 的文档,因此我使用了 C++ 文档,它们通常几乎相似。

这是我所拥有的:

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 

python-opengl 有不同的方法吗?我在这里做错了什么?

谢谢。

请您参考如下方法:

不幸的是,PyOpenGL 定义回调函数的方式需要一个 int 作为返回类型,而不是 void。下面是您的 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