Как устранить ошибку: AttributeError: модуль 'pyglfw' не имеет атрибута 'pyglfwInit' - PullRequest
1 голос
/ 23 апреля 2020

Я хочу создать проект openGL, используя python. И приведенный ниже код создает окно для отображения графика c.

import os

import glfw
from OpenGL.GL import *


class renderwindow():
    '''GLFW Renderting window class'''

    def __init__(self):

        #save current working directory
        cwd = os.getcwd()

        #initialize glfw
        glfw.glfwInit()

        #restore cws
        os.chdir(cwd)

        #version hints
        glfw.glfwWindowHint()

        glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MAJOR, 3)
        glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MINOR, 3)
        glfw.glfwWindowHint(glfw.GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE)
        glfw.glfwWindowHint(glfw.GLFW_OPENGL_PROFILE,
                            glfw.GLFW_OPENGL_CORE_PROFILE)

        # make a window
        self.width, self.height = 640, 480
        self.aspect = self.width / float(self.height)
        self.win = glfw.glfwCreateWindow(self.width, self.height,
                                         b'simpleglfw')

        # make the context current
        glfw.glfwMakeContextCurrent(self.win)

    def main(self):
        glViewport(0, 0, self.width, self.height)
        glEnable(GL_DEPTH_TEST)
        glClearColor(0.5, 0.5, 0.5, 1.0)

Когда я запускаю код, он сообщает об ошибке, как это:

Traceback (most recent call last):
  File "/snap/pycharm-community/192/plugins/python-ce/helpers/pydev/pydevd.py", line 1438, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/snap/pycharm-community/192/plugins/python-ce/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/surface/Final-Year-Project/FYP/Main.py", line 6, in <module>
    class main():
  File "/home/surface/Final-Year-Project/FYP/Main.py", line 29, in main
    rw = renderwindow()
  File "/home/surface/Final-Year-Project/FYP/Open_GL_project1/RenderWIndow.py", line 16, in __init__
    glfw.glfwInit()
AttributeError: module 'glfw' has no attribute 'glfwInit'

Process finished with exit code 1

Я ищу решение в inte rnet и некоторые люди говорят, что проблема вызвана старой версией GLFW. Пишарм не соответствует GLFW. Я не знаю как это решить

1 Ответ

1 голос
/ 23 апреля 2020

Имя метода не glfwInit, это init. Это относится и к другим методам. (window_hint, create_window, make_context_current):

import os

import glfw
from OpenGL.GL import *

class renderwindow():
    '''GLFW Renderting window class'''

    def __init__(self):

        #save current working directory
        cwd = os.getcwd()

        #initialize glfw
        glfw.init()

        #restore cws
        os.chdir(cwd)

        #version hints
        glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3)
        glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 3)
        glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE)
        glfw.window_hint(glfw.OPENGL_PROFILE,
                            glfw.OPENGL_CORE_PROFILE)

        # make a window
        self.width, self.height = 640, 480
        self.aspect = self.width / float(self.height)
        self.win = glfw.create_window(self.width, self.height,
                                         'simpleglfw', None, None)

        # make the context current
        glfw.make_context_current(self.win)

    def main(self):
        glViewport(0, 0, self.width, self.height)
        glEnable(GL_DEPTH_TEST)
        glClearColor(0.5, 0.5, 0.5, 1.0)

В качестве альтернативы import glfw.GLFW as glfw:

import os

#import glfw
import glfw.GLFW as glfw

from OpenGL.GL import *

class renderwindow():
    '''GLFW Renderting window class'''

    def __init__(self):

        #save current working directory
        cwd = os.getcwd()

        #initialize glfw
        glfw.glfwInit()

        #restore cws
        os.chdir(cwd)

        #version hints
        glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MAJOR, 3)
        glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MINOR, 3)
        glfw.glfwWindowHint(glfw.GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE)
        glfw.glfwWindowHint(glfw.GLFW_OPENGL_PROFILE,
                            glfw.GLFW_OPENGL_CORE_PROFILE)

        # make a window
        self.width, self.height = 640, 480
        self.aspect = self.width / float(self.height)
        self.win = glfw.glfwCreateWindow(self.width, self.height,
                                         'simpleglfw', None, None)

        # make the context current
        glfw.glfwMakeContextCurrent(self.win)

    def main(self):
        glViewport(0, 0, self.width, self.height)
        glEnable(GL_DEPTH_TEST)
        glClearColor(0.5, 0.5, 0.5, 1.0)

wnd = renderwindow()
...