Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/40: Рейтинг темы: голосов - 40, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 32
1

PyQt5 и OpenGL

28.11.2018, 20:18. Показов 7484. Ответов 10

Author24 — интернет-сервис помощи студентам
Добрый день, уважаемые программисты! Я делаю интерфейс в pyqt5, мне необходимо сделать отрисовку объектов - сфер в OpenGL (в Qt я добавила QOpenGLWidget и использую его).
Я создала 2 класса - для самого интерфейса и для OpenGL виджета:
class ExampleApp(QtWidgets.QMainWindow, ui_for_particles.Ui_MainWindow, QtOpenGL.QGLWidget) и
class glWidget(QtWidgets.QOpenGLWidget) соответственно.
В ExampleApp я создаю объект self.gl_Widget_ = glWidget(self.openGLWidget). Мне необходимо считать из интерфейса введенные пользователем данные и передать их в объект self.gl_Widget_. Подскажите, как это можно сделать, или лучше для всего этого использовать один класс?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2018, 20:18
Ответы с готовыми решениями:

Все методы и атрибуты PyQt5.QtGui PyQt5.Qtwdigets и QtCore
На официальной документации модуля я не нашёл все методы и атрибуты PyQt5. может дадите источник со...

Unable to import 'PyQt5' / No module named 'PyQt5' /
Здравствуйте. Имеется Ubuntu 18.04. Хочу использовать pyside2. Установил PyQt5. :~$ pip install...

PyQt5 Error while finding module specification for 'PyQt5.uic.pyuic' (ModuleNotFoundError: No module named 'PyQt
В общем поставил pyqt5 и python3.7 пишу в консоль python -m PyQt5.uic.pyuic Выдает ошибку Error...

Perl + OpenGL Как избавиться от повторного подключения библиотеки OpenGL в модулях
Доброго времени суток! Сегодня решил заняться программированием на языке Perl, используя...

10
928 / 690 / 269
Регистрация: 10.12.2016
Сообщений: 1,698
28.11.2018, 20:24 2
а чем стандартные примеры не подходят?
https://github.com/baoboa/pyqt... grabber.py
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 32
28.11.2018, 20:27  [ТС] 3
Да, я запускала пример отсюда
https://github.com/baoboa/pyqt... hellogl.py

проблема в том - как из MainWindow (окно интерфейса) передать параметры в класс GLWidget(QOpenGLWidget)
0
928 / 690 / 269
Регистрация: 10.12.2016
Сообщений: 1,698
28.11.2018, 20:43 4
1. где вы там увидели QMainWindow?
2.в данном примере как раз расписана передача событий
Python
1
2
3
4
5
6
        self.xSlider.valueChanged.connect(self.glWidget.setXRotation)
        self.glWidget.xRotationChanged.connect(self.xSlider.setValue)
        self.ySlider.valueChanged.connect(self.glWidget.setYRotation)
        self.glWidget.yRotationChanged.connect(self.ySlider.setValue)
        self.zSlider.valueChanged.connect(self.glWidget.setZRotation)
        self.glWidget.zRotationChanged.connect(self.zSlider.setValue)
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 32
28.11.2018, 23:00  [ТС] 5
Но там же создается 3 объекта прямо в этом классе class GLWidget(QOpenGLWidget)
Python
1
2
3
self.xSlider = self.createSlider()
self.ySlider = self.createSlider()
self.zSlider = self.createSlider()
а мне надо другое

У меня есть класс sphere_ - в его параметры входят радиус, цвет, координаты. Я считываю из интерфейса данные, завожу соответствующий объект (в классе, где происходит инициализация интерфейса, наследуемом от QtWidgets.QMainWindow. В ссылке, которую я кидала выше - это класс class Window(QWidget))
Python
1
self.sphere_1 = sphere_(coordinates,color,rad)
И мне надо этот объект отрисовать в классе glWidget. Как это сделать
0
928 / 690 / 269
Регистрация: 10.12.2016
Сообщений: 1,698
29.11.2018, 07:13 6
покажите свой код, что не получается
Цитата Сообщение от klmnopr Посмотреть сообщение
И мне надо этот объект отрисовать в классе glWidget. Как это сделать
передайте их параметрами

Добавлено через 11 минут
https://habr.com/post/132674/
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 32
29.11.2018, 18:46  [ТС] 7
У меня 2 класса
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class ExampleApp(QtWidgets.QMainWindow, ui_for_particles.Ui_MainWindow, QtOpenGL.QGLWidget):
    
    def __init__(self):
        self.gl_Widget_ = glWidget(self.openGLWidget)
 
    def add_object(self):
        print('add_obj')
        coordinates = Coord(float(self.x_crd.text()),float(self.y_crd.text()),float(self.z_crd.text()))
        speed = Speed(float(self.speed_u.text()),float(self.speed_v.text()),float(self.speed_w.text()))
        S = Sphere(coordinates,speed,self.mass,self.col_.getRgbF()) #создаю сферу по параметрам, считанным из интерфейса
        
def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение
    
if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()
и класс для виджета

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class glWidget(QtWidgets.QOpenGLWidget):
 
    def __init__(self, parent, objct):
        super(glWidget, self).__init__(parent)
        ...
    def initializeGL(self):
        #код
 
    def paintGL(self):
        print('paintGL')
        gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
        gl.glLoadIdentity()
        #код
Внимание, вопрос: как передать из класса ExampleApp в класс glWidget объект типа Sphere?
0
928 / 690 / 269
Регистрация: 10.12.2016
Сообщений: 1,698
29.11.2018, 20:06 8
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout,QOpenGLWidget)
import OpenGL.GL as gl
from OpenGL import GLU as glu
 
class Window(QWidget):
 
    def __init__(self):
        super(Window, self).__init__()
        self.glWidget = GLWidget()
        mainLayout = QGridLayout(self)
        mainLayout.setContentsMargins(0,0,0,0)
        mainLayout.addWidget(self.glWidget)
        self.setWindowTitle("Hello GL")
 
class GLWidget(QOpenGLWidget):
 
    def __init__(self, parent=None):
        super().__init__(parent)
        
    def initializeGL(self):
        gl.glClearColor(0, 0, 0, 0);
        gl.glShadeModel(gl.GL_SMOOTH);
        gl.glEnable(gl.GL_COLOR_MATERIAL);
        gl.glEnable(gl.GL_LIGHTING);
        ambientLight=[ 0.2, 0.2, 0.2, 1.0 ];
        diffuseLight=[ 0.5, 0.5, 0.5, 1.0 ];
        lightPos=[ 100, 100, 100, 0 ];
        gl.glLightfv(gl.GL_LIGHT0, gl.GL_AMBIENT, ambientLight);
        gl.glLightfv(gl.GL_LIGHT0, gl.GL_DIFFUSE, diffuseLight);
        gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, lightPos);
        gl.glEnable(gl.GL_LIGHT0);
        gl.glColorMaterial(gl.GL_FRONT_AND_BACK, gl.GL_AMBIENT_AND_DIFFUSE)
 
    def paintGL(self):
        gl.glClear( gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT );
        gl.glColor3f(1.0, 2.0, 1.0);
        gl.glMatrixMode(gl.GL_MODELVIEW);
        gl.glPushMatrix();
        gl.glTranslatef(0.3,0.3,0.0);
        qobj = glu.gluNewQuadric();
        glu.gluQuadricOrientation(qobj, glu.GLU_OUTSIDE);
        glu.gluSphere(qobj, 0.67, 100, 100);
        gl.glPopMatrix();
 
 
    def resizeGL(self, width, height):
        side = min(width, height)
        if side < 0: return
        gl.glViewport((width - side) // 2, (height - side) // 2, side, side)
        gl.glMatrixMode(gl.GL_PROJECTION)
        gl.glLoadIdentity()
        gl.glScale(height/width, 1.0, 1.0);
        gl.glMatrixMode(gl.GL_MODELVIEW);
 
 
if __name__ == '__main__':
 
    app = QApplication([])
    w = Window()
    w.resize(400,400)
    w.show()
    app.exec_()
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 32
30.11.2018, 00:52  [ТС] 9
Это вообще что? Вы читали мой вопрос? У меня есть класс Sphere, мне именно надо создать объект этого класса и передать его
Python
1
2
3
4
5
6
7
class Sphere:
    def __init__(self, position,  m, color):
        self.x = position.x
        self.y = position.y
        self.z = position.z
        self.color = color 
        self.position = position
0
928 / 690 / 269
Регистрация: 10.12.2016
Сообщений: 1,698
30.11.2018, 08:41 10
вам же писали - через парвметры
Python
1
 a = A(p1,p2,p3)
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 32
30.11.2018, 19:50  [ТС] 11
вроде разобралась
в классе
Python
1
2
3
4
5
class glWidget(QtWidgets.QOpenGLWidget):
    def __init__(self, parent, sphere):
        super(glWidget, self).__init__(parent)
        self.sp = sphere
        ...
и дальше использую self.sp внутри класса glWidget
я просто думала, что при передаче объекта надо как-то указывать тип объекта, как в плюсах, оказывается не надо, все сам понял
0
30.11.2018, 19:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2018, 19:50
Помогаю со студенческими работами здесь

Какая значительная разница между OpenGL ES 2.0 и OpenGL 3.3 при использовании в Qt
Привет всем! У меня видеокарта имеет поддержку 3.1 версию OpenGL, обновить хочу её с помощью...

Создаю игру с научным уколоном на C++/opengl. Как подключить openGL и добиться кроссплатформенности
Я читал про opengl - для его инициализации нужно создавать windows - окно. Для linux видимо...

Чем отличаются готовые сборки Qt под Win + MSVC с OpenGL и без OpenGL?
Ну вопрос собственно в том, что мне не очень понятно, что же в сборке кьюте без опен джел имеется...

OpenGL Ваша текущая конфигурация рабочего стола не поддерживает OpenGL Аппаратное ускорение.
всем здрасте ) скачал opengl extensions viewer решил проверить драйверы на видео карту.В...

(2 главы перевода книги доступно) OpenGL Programming Guide, Version 4.3, 8th Edition - OpenGL
Продолжая тему с переводом книги https://www.cyberforum.ru/opengl/thread1551398.html Выкладываю...

Ошибки при подключение opengl, немного не связанные с opengl
#include &lt;windows.h&gt; #include &quot;stdafx.h&quot; #include &lt;gl/gl.h&gt; #include &lt;gl/glu.h&gt; #include...

На видеокарте, которая поддерживает OpenGL не работают игры которые требуют OpenGL (Драйвера обновлены несколько раз)
Конфиг: Процессор - Intel Core i7-6700k Видеокарта - R9 390 8gb Все остальное думаю неважно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru