Browser inside task panel
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
Be nice to others! Respect the FreeCAD code of conduct!
Browser inside task panel
I'd like to do a task panel with a form which displays some browser content (the html link to the content will be fix inside the task panel code). The user should be able to navigate through the content inside these form. Does someone has an idea what Qt/PySide form to use and where can I find an example in this regard? All should be done as macro or module in Python and PySide.
The content to display will be similar to this web page: http://autodesk-fusion.partcommunity.com
cheers bernd
EDIT: see https://forum.freecadweb.org/viewtopic. ... 10#p422372
The content to display will be similar to this web page: http://autodesk-fusion.partcommunity.com
cheers bernd
EDIT: see https://forum.freecadweb.org/viewtopic. ... 10#p422372
Re: Browser inside task panel
Qt provides browser widgets you can easily embed. I think there is a difference if you use Qt4 or 5, but for 5 this should work:
http://doc.qt.io/qt-5/qwebengineview.html
http://doc.qt.io/qt-5/qwebengineview.html
Re: Browser inside task panel
Looks like the Open Source Ecology is wanting to use websockets:
https://github.com/damoti/osedev-workbench
http://opensourceecology.org/wiki/OSEDev_Workbench
https://github.com/damoti/osedev-workbench
http://opensourceecology.org/wiki/OSEDev_Workbench
Alone you go faster. Together we go farther
Please mark thread [Solved]
Want to contribute back to FC? Checkout:
'good first issues' | Open TODOs and FIXMEs | How to Help FreeCAD | How to report Bugs
Please mark thread [Solved]
Want to contribute back to FC? Checkout:
'good first issues' | Open TODOs and FIXMEs | How to Help FreeCAD | How to report Bugs
Re: Browser inside task panel
thanks guys. Found something myself too. https://gist.github.com/justinfx/2af62b1c56174e4b9129 and https://www.youtube.com/watch?v=Gfez0mvwQcg
- microelly2
- Veteran
- Posts: 4688
- Joined: Tue Nov 12, 2013 4:06 pm
- Contact:
Re: Browser inside task panel
I had the idea some days ago to run the report view with links back into the 3d scene.
Having a trace in html format in a dockwindow may do this and bring some comfort.
so lets wait for your first prototype.
Having a trace in html format in a dockwindow may do this and bring some comfort.
so lets wait for your first prototype.
Re: Browser inside task panel
Code: Select all
import FreeCAD
import FreeCADGui
from PySide import QtCore, QtGui, QtWebKit
class TransWindow(QtGui.QDialog):
"""
Example of a partially transparent browser window
Base on screenshot: http://goo.gl/UiULPU
"""
HOME = "http://www.forum.freecadweb.org"
def __init__(self):
super(TransWindow, self).__init__()
self.resize(800,600)
style = QtGui.qApp.style()
self.backButton = QtGui.QToolButton(self)
self.backButton.setIcon(style.standardIcon(style.SP_ArrowLeft))
self.forwardButton = QtGui.QToolButton(self)
self.forwardButton.setIcon(style.standardIcon(style.SP_ArrowRight))
self.reloadButton = QtGui.QToolButton(self)
self.reloadButton.setIcon(style.standardIcon(style.SP_BrowserReload))
self.location = QtGui.QLineEdit(self)
self.webView = QtWebKit.QWebView(self)
self.webView.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
toolLayout = QtGui.QHBoxLayout()
toolLayout.setSpacing(0)
toolLayout.addWidget(self.backButton)
toolLayout.addWidget(self.forwardButton)
toolLayout.addSpacing(6)
toolLayout.addWidget(self.reloadButton)
toolLayout.addSpacing(6)
toolLayout.addWidget(self.location)
self.layout = QtGui.QVBoxLayout(self)
self.layout.setSpacing(16)
self.layout.addLayout(toolLayout)
self.layout.addWidget(self.webView)
self.setStyleSheet("""
QDialog {
background-color: rgba(50,50,50,35%);
border-radius: 5px;
}
""")
self.backButton.clicked.connect(self.webView.back)
self.forwardButton.clicked.connect(self.webView.forward)
self.reloadButton.clicked.connect(self.webView.reload)
self.location.returnPressed.connect(self._updateLocation)
self.webView.urlChanged.connect(self._locationChanged)
def showEvent(self, event):
super(TransWindow, self).showEvent(event)
self.webView.load(QtCore.QUrl(self.HOME))
def _updateLocation(self):
text = self.location.text().strip()
if not text:
return
# Being really basic here, for the demo
url = QtCore.QUrl(text)
if not url.scheme():
url.setScheme("http")
self.webView.load(url)
def _locationChanged(self, url):
self.location.setText(url.toString())
mw = FreeCADGui.getMainWindow()
d = QtGui.QDockWidget()
d.setWidget(TransWindow())
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, d)
Re: Browser inside task panel
less code lines ...
Code: Select all
import FreeCAD
import FreeCADGui
from PySide import QtCore, QtGui, QtWebKit
class TransWindow(QtGui.QDialog):
HOME = "http://www.forum.freecadweb.org"
def __init__(self):
super(TransWindow, self).__init__()
self.webView = QtWebKit.QWebView(self)
self.webView.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
self.layout = QtGui.QVBoxLayout(self)
self.layout.addLayout(QtGui.QHBoxLayout())
self.layout.addWidget(self.webView)
def showEvent(self, event):
super(TransWindow, self).showEvent(event)
self.webView.load(QtCore.QUrl(self.HOME))
mw = FreeCADGui.getMainWindow()
d = QtGui.QDockWidget()
d.setWidget(TransWindow())
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, d)
Re: Browser inside task panel
Alternatively you i guess could just use Web Workbench for such task.
Re: Browser inside task panel
the file :
A browser widget inside FreeCAD which includes the part above in FreeCAD by click on a text button. This was very helpful https://gist.github.com/webwurst/2203822
A browser widget inside FreeCAD which includes the part above in FreeCAD by click on a text button. This was very helpful https://gist.github.com/webwurst/2203822
Code: Select all
import FreeCAD
import FreeCADGui
from PySide import QtCore, QtGui, QtWebKit
myhtml = """
<html>
<body>
<h1>Test fuer Web Step Part Importer</h1><br>
<h2><a href="#" onclick="jsWebPartImporter.text('https://forum.freecadweb.org/download/file.php?id=48016')">Press the Button to import the Part in FreeCAD</a></h2>
<h2><a href="#" onclick="alert('Javascript works!')">Java Script Test</a></h2>
</body>
</html>
"""
class WebPartImporter(QtCore.QObject):
def __init__(self, parent=None):
super(WebPartImporter, self).__init__(parent)
@QtCore.Slot(str)
def text(self, pathToStepFile):
print pathToStepFile
import tempfile
import os
stepTmpFd, stepTmpPath = tempfile.mkstemp(suffix=".step")
os.close(stepTmpFd)
import urllib
stepfile = urllib.URLopener()
stepdata = stepfile.retrieve(pathToStepFile, stepTmpPath)
import Part
Part.show(Part.read(stepTmpPath))
FreeCADGui.ActiveDocument.activeView().viewAxonometric()
FreeCADGui.SendMsgToActiveView("ViewFit")
os.remove(stepTmpPath)
class TransWindow(QtGui.QDialog):
def __init__(self):
super(TransWindow, self).__init__()
self.webView = QtWebKit.QWebView(self)
self.frame = self.webView.page().mainFrame()
self.frame.addToJavaScriptWindowObject('jsWebPartImporter', WebPartImporter())
self.webView.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
self.layout = QtGui.QVBoxLayout(self)
self.layout.addLayout(QtGui.QHBoxLayout())
self.layout.addWidget(self.webView)
def showEvent(self, event):
super(TransWindow, self).showEvent(event)
self.webView.setHtml(myhtml)
mw = FreeCADGui.getMainWindow()
d = QtGui.QDockWidget()
d.setWidget(TransWindow())
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, d)
Re: Browser inside task panel
another version which uses a step file and and html from my server. Next step is a html from one of the big part supplier I'm in contact with.
Code: Select all
import FreeCAD
import FreeCADGui
from PySide import QtCore, QtGui, QtWebKit
class WebPartImporter(QtCore.QObject):
def __init__(self, parent=None):
super(WebPartImporter, self).__init__(parent)
@QtCore.Slot(str)
def text(self, pathToStepFile):
print pathToStepFile
import tempfile
import os
stepTmpFd, stepTmpPath = tempfile.mkstemp(suffix=".step")
os.close(stepTmpFd)
import urllib
stepfile = urllib.URLopener()
stepdata = stepfile.retrieve(pathToStepFile, stepTmpPath)
import Part
Part.show(Part.read(stepTmpPath))
FreeCADGui.ActiveDocument.activeView().viewAxonometric()
FreeCADGui.SendMsgToActiveView("ViewFit")
os.remove(stepTmpPath)
class TransWindow(QtGui.QDialog):
def __init__(self):
super(TransWindow, self).__init__()
self.webView = QtWebKit.QWebView(self)
self.frame = self.webView.page().mainFrame()
self.frame.addToJavaScriptWindowObject('jsWebPartImporter', WebPartImporter())
self.webView.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
self.layout = QtGui.QVBoxLayout(self)
self.layout.addLayout(QtGui.QHBoxLayout())
self.layout.addWidget(self.webView)
def showEvent(self, event):
super(TransWindow, self).showEvent(event)
self.webView.load(QtCore.QUrl('http://www.b75.ch/download/partimportinfreecad.html'))
mw = FreeCADGui.getMainWindow()
d = QtGui.QDockWidget()
d.setWidget(TransWindow())
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, d)