Skip to content

Commit 64457b7

Browse files
committed
Refactored app window, written cube and events tutorials
This commit introduces several interesting changes. 1. Refactored the use of application window. Now the skeleton window is delegated to window.py in utils. When there is a need to change or go beyond what's provided, simply subclass it like in app.py of glevents. 2. Tutorial on drawing a cube is done 3. Tutorial on receiving events is done as well. Next is the lightening. It should not be too difficult to handle lightnening from now on. Then I will give a break and deal with ptmviewer.
1 parent 45c0071 commit 64457b7

File tree

13 files changed

+1044
-420
lines changed

13 files changed

+1044
-420
lines changed

tutorials/01-triangle/TriangleTutorial.ipynb

Lines changed: 12 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
},
2727
{
2828
"cell_type": "code",
29-
"execution_count": 7,
29+
"execution_count": 1,
3030
"metadata": {},
3131
"outputs": [
3232
{
@@ -35,7 +35,7 @@
3535
"CompletedProcess(args=['python', './app.py'], returncode=0)"
3636
]
3737
},
38-
"execution_count": 7,
38+
"execution_count": 1,
3939
"metadata": {},
4040
"output_type": "execute_result"
4141
}
@@ -95,6 +95,7 @@
9595
"source": [
9696
"from PySide2 import QtWidgets, QtCore, QtGui\n",
9797
"from myGLWidget import TriangleGL\n",
98+
"from tutorials.utils.window import GLWindow as AppWindow\n",
9899
"import sys"
99100
]
100101
},
@@ -104,36 +105,17 @@
104105
"source": [
105106
"Obviously we have not made a TriangleGL widget yet, but we do need the other ones.\n",
106107
"\n",
107-
"Just to show that we can actually mix other widgets in this window. \n",
108-
"\n",
109-
"Here is a small function that creates sliders."
110-
]
111-
},
112-
{
113-
"cell_type": "code",
114-
"execution_count": null,
115-
"metadata": {
116-
"collapsed": true
117-
},
118-
"outputs": [],
119-
"source": [
120-
"def createSlider():\n",
121-
" \"Create vertical slider widget\"\n",
122-
" slider = QtWidgets.QSlider(QtCore.Qt.Vertical)\n",
123-
"\n",
124-
" slider.setRange(0, 360 * 16)\n",
125-
" slider.setSingleStep(16)\n",
126-
" slider.setPageStep(15 * 16)\n",
127-
" slider.setTickInterval(15 * 16)\n",
128-
" slider.setTickPosition(QtWidgets.QSlider.TicksRight)\n",
129-
" return slider"
108+
"The `window.py` contains an application window that contains several widgets alongside of an opengl one. \n",
109+
"We shall see how they would interract with each other in other tutorials. \n",
110+
"For now just remember that resizing the window resizes the opengl widget as well.\n",
111+
"Since this is not a tutorial on how to make a qt application we skip the explanation about the code in `window.py`"
130112
]
131113
},
132114
{
133115
"cell_type": "markdown",
134116
"metadata": {},
135117
"source": [
136-
"Here is the constructor of our application"
118+
"So our `app.py` looks like the following. "
137119
]
138120
},
139121
{
@@ -144,126 +126,17 @@
144126
},
145127
"outputs": [],
146128
"source": [
147-
"class AppWindow(QtWidgets.QMainWindow):\n",
148-
" \"Application window\"\n",
149-
"\n",
150-
" def __init__(self, parent=None):\n",
151-
" super().__init__(parent)\n",
152-
" self.glWidget = TriangleGL() # initialized the gl widget\n",
153-
" self.xSlider = createSlider() # some slider\n",
154-
" self.ySlider = createSlider() # some slider\n",
155-
" self.zSlider = createSlider() # some slider\n",
156-
"\n",
157-
" mainLayout = QtWidgets.QHBoxLayout() # a layout to hold everything together\n",
158-
" \n",
159-
" # adding widgets to layout \n",
160-
" mainLayout.addWidget(self.glWidget) # \n",
161-
" mainLayout.addWidget(self.xSlider)\n",
162-
" mainLayout.addWidget(self.ySlider)\n",
163-
" mainLayout.addWidget(self.zSlider)\n",
164-
" \n",
165-
" # main parent/central widget to hold the layout\n",
166-
" self.mainwidget = QtWidgets.QWidget()\n",
167-
" self.mainwidget.setLayout(mainLayout)\n",
168-
" \n",
169-
" # Its parent is the application window\n",
170-
" self.mainwidget.setParent(self)\n",
171-
" \n",
172-
" # Setting the title of the window\n",
173-
" self.setWindowTitle(\"Triangle Opengl widget\")\n",
174-
" \n",
175-
" # setting its minimum size \n",
176-
" # do not forget a resize event does not \n",
177-
" # necessarily trigger a resize for the widgets inside\n",
178-
" self.setMinimumSize(800, 600)"
179-
]
180-
},
181-
{
182-
"cell_type": "markdown",
183-
"metadata": {},
184-
"source": [
185-
"We also add keypress method to easily close the application."
186-
]
187-
},
188-
{
189-
"cell_type": "code",
190-
"execution_count": null,
191-
"metadata": {
192-
"collapsed": true
193-
},
194-
"outputs": [],
195-
"source": [
196-
" def keyPressEvent(self, event):\n",
197-
" if event.key() == QtCore.Qt.Key_Escape:\n",
198-
" self.close()\n",
199-
" else:\n",
200-
" super().keyPressEvent(event)"
201-
]
202-
},
203-
{
204-
"cell_type": "markdown",
205-
"metadata": {},
206-
"source": [
207-
"So our final window looks like the following"
208-
]
209-
},
210-
{
211-
"cell_type": "code",
212-
"execution_count": null,
213-
"metadata": {
214-
"collapsed": true
215-
},
216-
"outputs": [],
217-
"source": [
218-
"from PySide2 import QtWidgets, QtCore, QtGui\n",
129+
"from PySide2 import QtWidgets\n",
219130
"from myGLWidget import TriangleGL\n",
131+
"from tutorials.utils.window import GLWindow as AppWindow\n",
220132
"import sys\n",
221133
"\n",
222-
"def createSlider():\n",
223-
" slider = QtWidgets.QSlider(QtCore.Qt.Vertical)\n",
224-
"\n",
225-
" slider.setRange(0, 360 * 16)\n",
226-
" slider.setSingleStep(16)\n",
227-
" slider.setPageStep(15 * 16)\n",
228-
" slider.setTickInterval(15 * 16)\n",
229-
" slider.setTickPosition(QtWidgets.QSlider.TicksRight)\n",
230-
" return slider\n",
231-
"\n",
232-
"\n",
233-
"class AppWindow(QtWidgets.QMainWindow):\n",
234-
" \"Application window\"\n",
235-
"\n",
236-
" def __init__(self, parent=None):\n",
237-
" super().__init__(parent)\n",
238-
" self.glWidget = TriangleGL()\n",
239-
" self.xSlider = createSlider()\n",
240-
" self.ySlider = createSlider()\n",
241-
" self.zSlider = createSlider()\n",
242-
"\n",
243-
" mainLayout = QtWidgets.QHBoxLayout()\n",
244-
" mainLayout.addWidget(self.glWidget)\n",
245-
" mainLayout.addWidget(self.xSlider)\n",
246-
" mainLayout.addWidget(self.ySlider)\n",
247-
" mainLayout.addWidget(self.zSlider)\n",
248-
" self.mainwidget = QtWidgets.QWidget()\n",
249-
" self.mainwidget.setLayout(mainLayout)\n",
250-
" self.mainwidget.setParent(self)\n",
251-
" self.setWindowTitle(\"Triangle Opengl widget\")\n",
252-
" self.setMinimumSize(800, 600)\n",
253-
"\n",
254-
" def keyPressEvent(self, event):\n",
255-
" if event.key() == QtCore.Qt.Key_Escape:\n",
256-
" self.close()\n",
257-
" else:\n",
258-
" super().keyPressEvent(event)\n",
259-
"\n",
260-
"\n",
261134
"if __name__ == '__main__':\n",
262135
" app = QtWidgets.QApplication(sys.argv)\n",
263-
" window = AppWindow()\n",
136+
" window = AppWindow(glwidget=TriangleGL)\n",
264137
" window.show()\n",
265138
" res = app.exec_()\n",
266-
" sys.exit(res)"
139+
" sys.exit(res)\n"
267140
]
268141
},
269142
{

tutorials/01-triangle/app.py

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,13 @@
1-
# author: Kaan Eraslan
2-
# license: see, LICENSE
1+
# Author: Kaan Eraslan
32

4-
from PySide2 import QtWidgets, QtCore
3+
from PySide2 import QtWidgets
54
from gltriangle import TriangleGL
5+
from tutorials.utils.window import GLWindow as AppWindow
66
import sys
77

8-
9-
def createSlider():
10-
slider = QtWidgets.QSlider(QtCore.Qt.Vertical)
11-
12-
slider.setRange(0, 360 * 16)
13-
slider.setSingleStep(16)
14-
slider.setPageStep(15 * 16)
15-
slider.setTickInterval(15 * 16)
16-
slider.setTickPosition(QtWidgets.QSlider.TicksRight)
17-
return slider
18-
19-
20-
class AppWindow(QtWidgets.QMainWindow):
21-
"Application window"
22-
23-
def __init__(self, parent=None):
24-
super().__init__(parent)
25-
self.glWidget = TriangleGL()
26-
self.xSlider = createSlider()
27-
self.ySlider = createSlider()
28-
self.zSlider = createSlider()
29-
30-
mainLayout = QtWidgets.QHBoxLayout()
31-
mainLayout.addWidget(self.glWidget)
32-
mainLayout.addWidget(self.xSlider)
33-
mainLayout.addWidget(self.ySlider)
34-
mainLayout.addWidget(self.zSlider)
35-
self.mainwidget = QtWidgets.QWidget()
36-
self.mainwidget.setLayout(mainLayout)
37-
self.mainwidget.setParent(self)
38-
self.setWindowTitle("PySide2 OpenGL Test Window")
39-
self.setMinimumSize(800, 600)
40-
41-
def keyPressEvent(self, event):
42-
if event.key() == QtCore.Qt.Key_Escape:
43-
self.close()
44-
else:
45-
super().keyPressEvent(event)
46-
47-
488
if __name__ == '__main__':
499
app = QtWidgets.QApplication(sys.argv)
50-
window = AppWindow()
10+
window = AppWindow(glwidget=TriangleGL)
5111
window.show()
5212
res = app.exec_()
5313
sys.exit(res)

tutorials/02-rectangle/app.py

Lines changed: 4 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,14 @@
1-
# author: Kaan Eraslan
2-
# license: see, LICENSE
1+
# Author: Kaan Eraslan
32

4-
from PySide2 import QtWidgets, QtCore
3+
from PySide2 import QtWidgets, QtCore, QtGui
54
from glrectangle import RectangleGL
5+
from tutorials.utils.window import GLWindow as AppWindow
66
import sys
77

8-
def createSlider():
9-
slider = QtWidgets.QSlider(QtCore.Qt.Vertical)
10-
11-
slider.setRange(0, 360 * 16)
12-
slider.setSingleStep(16)
13-
slider.setPageStep(15 * 16)
14-
slider.setTickInterval(15 * 16)
15-
slider.setTickPosition(QtWidgets.QSlider.TicksRight)
16-
return slider
17-
18-
19-
class AppWindow(QtWidgets.QMainWindow):
20-
"Application window"
21-
22-
def __init__(self, parent=None):
23-
super().__init__(parent)
24-
self.glWidget = RectangleGL()
25-
self.xSlider = createSlider()
26-
self.ySlider = createSlider()
27-
self.zSlider = createSlider()
28-
29-
mainLayout = QtWidgets.QHBoxLayout()
30-
mainLayout.addWidget(self.glWidget)
31-
mainLayout.addWidget(self.xSlider)
32-
mainLayout.addWidget(self.ySlider)
33-
mainLayout.addWidget(self.zSlider)
34-
self.mainwidget = QtWidgets.QWidget()
35-
self.mainwidget.setLayout(mainLayout)
36-
self.mainwidget.setParent(self)
37-
self.setWindowTitle("PySide2 OpenGL Test Window")
38-
self.setMinimumSize(800, 600)
39-
40-
def keyPressEvent(self, event):
41-
if event.key() == QtCore.Qt.Key_Escape:
42-
self.close()
43-
else:
44-
super().keyPressEvent(event)
45-
468

479
if __name__ == '__main__':
4810
app = QtWidgets.QApplication(sys.argv)
49-
window = AppWindow()
11+
window = AppWindow(RectangleGL)
5012
window.show()
5113
res = app.exec_()
5214
sys.exit(res)

tutorials/03-VaoVbo/app.py

Lines changed: 4 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,14 @@
1-
# author: Kaan Eraslan
2-
# license: see, LICENSE
1+
# Author: Kaan Eraslan
32

4-
from PySide2 import QtWidgets, QtCore
3+
from PySide2 import QtWidgets
54
from glshader import TriangleGL
5+
from tutorials.utils.window import GLWindow as AppWindow
66
import sys
77

8-
def createSlider():
9-
slider = QtWidgets.QSlider(QtCore.Qt.Vertical)
10-
11-
slider.setRange(0, 360 * 16)
12-
slider.setSingleStep(16)
13-
slider.setPageStep(15 * 16)
14-
slider.setTickInterval(15 * 16)
15-
slider.setTickPosition(QtWidgets.QSlider.TicksRight)
16-
return slider
17-
18-
19-
class AppWindow(QtWidgets.QMainWindow):
20-
"Application window"
21-
22-
def __init__(self, parent=None):
23-
super().__init__(parent)
24-
self.glWidget = TriangleGL()
25-
self.xSlider = createSlider()
26-
self.ySlider = createSlider()
27-
self.zSlider = createSlider()
28-
29-
mainLayout = QtWidgets.QHBoxLayout()
30-
mainLayout.addWidget(self.glWidget)
31-
mainLayout.addWidget(self.xSlider)
32-
mainLayout.addWidget(self.ySlider)
33-
mainLayout.addWidget(self.zSlider)
34-
self.mainwidget = QtWidgets.QWidget()
35-
self.mainwidget.setLayout(mainLayout)
36-
self.mainwidget.setParent(self)
37-
self.setWindowTitle("PySide2 OpenGL Test Window")
38-
self.setMinimumSize(800, 600)
39-
40-
def keyPressEvent(self, event):
41-
if event.key() == QtCore.Qt.Key_Escape:
42-
self.close()
43-
else:
44-
super().keyPressEvent(event)
45-
468

479
if __name__ == '__main__':
4810
app = QtWidgets.QApplication(sys.argv)
49-
window = AppWindow()
11+
window = AppWindow(TriangleGL)
5012
window.show()
5113
res = app.exec_()
5214
sys.exit(res)

0 commit comments

Comments
 (0)