Skip to content

Commit 7c87c36

Browse files
author
Aaron Titus
committed
added support for displaying VPython output in a pyqt window
1 parent 96abd65 commit 7c87c36

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

vpython/no_notebook.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .vpython import GlowWidget, baseObj, vector, canvas
1+
from .vpython import GlowWidget, baseObj, vector, canvas, _browsertype
22
from ._notebook_helpers import _in_spyder, _undo_vpython_import_in_spyder
33

44
from http.server import BaseHTTPRequestHandler, HTTPServer
@@ -13,6 +13,11 @@
1313
import txaio
1414
import copy
1515
import socket
16+
import PyQt5.QtCore
17+
import PyQt5.QtWebEngineWidgets
18+
from PyQt5.QtWidgets import QApplication
19+
import multiprocessing
20+
1621

1722
import signal
1823
from urllib.parse import unquote
@@ -231,10 +236,26 @@ def onClose(self, wasClean, code, reason):
231236
else:
232237
__server = HTTPServer(('', __HTTP_PORT), serveHTTP)
233238
# or webbrowser.open_new_tab()
234-
_webbrowser.open('http://localhost:{}'.format(__HTTP_PORT))
239+
if(_browsertype=='default'): #uses default browser
240+
_webbrowser.open('http://localhost:{}'.format(__HTTP_PORT)) #uses default browser
241+
235242
except:
236243
pass
237244

245+
246+
def start_Qapp(port):
247+
# creates a python browser with PyQt5
248+
# runs qtbrowser.py in a separate process
249+
filepath=os.path.dirname(__file__)
250+
filename=filepath+'/qtbrowser.py'
251+
os.system('python '+filename+' http://localhost:{}'.format(port))
252+
253+
254+
#create a browser in its own process
255+
if(_browsertype=='pyqt'): #uses default browser
256+
__m = multiprocessing.Process(target=start_Qapp, args=(__HTTP_PORT,))
257+
__m.start()
258+
238259
__w = threading.Thread(target=__server.serve_forever)
239260
__w.start()
240261

vpython/vpython.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
'event_return', 'extrusion', 'faces', 'frame', 'gcurve', 'gdots',
2525
'ghbars', 'gobj', 'graph', 'gvbars', 'helix', 'label',
2626
'local_light', 'menu', 'meta_canvas', 'points', 'pyramid',
27-
'quad', 'radio', 'ring', 'simple_sphere', 'sleep', 'slider', 'sphere',
27+
'quad', 'radio', 'ring', 'set_browser', 'simple_sphere', 'sleep', 'slider', 'sphere',
2828
'standardAttributes', 'text', 'textures', 'triangle', 'vertex',
2929
'wtext', 'winput', 'keysdown']
3030

@@ -4118,3 +4118,12 @@ def keysdown():
41184118
for k in keysdownlist: # return a copy of keysdownlist
41194119
keys.append(k)
41204120
return keys
4121+
4122+
# global variable for type of web browser to display vpython
4123+
_browsertype = 'default'
4124+
def set_browser(type='default'):
4125+
global _browsertype
4126+
if type=='pyqt':
4127+
_browsertype='pyqt'
4128+
else:
4129+
_browsertype='default'

0 commit comments

Comments
 (0)