Monday 21 March 2016

python - View HTML field data with QT4 browers as a QGIS Run Feature Action Tool


I've successfully populated a sqlite table with an HTML-encoded-table as a field attribute, and so there is literally a Table within a single field value in sqlite, for each record. This is going to join with spatial features in a spatialite table to replicate a One polygon to Many records relationship. Map Tips can already successfully pop up the table when the mouse moves over the feature.



Now I'd like to increase functionality so that I can copy from the table, and scroll down through larger tables. I want it to open up in a browser box ( The largest tables don't show properly because the Map Tips pop-up window has its top margin aligned outside the monitor space, and the html table itself is aligned to the top of that map tips pop-up widow -- which I'm not worrying about trying to resolve )


I'm looking at a QGIS-Python-QT4-Brower example from this site: http://linfiniti.com/2012/03/a-python-layer-action-to-open-a-wikipedia-page-in-qgis/ titled "A python layer action to open a wikipedia page in QGIS" I saw that I might be able to do what I want with Python and QT4-Brower Window that's already a part of the QT4 packages that come with QGIS. I just need to run an Action on the field that contains my HTML table and have it pop up in that QT4 Browser, which would be more versatile than the Map Tips pop-up. The only difference with what I want to do is that I want to view the html-data in my field with the Qt4-browser rather than have the Qt4 browser open a designated wikipedia page. But I can't figure out how to pass the data to the browser.. I need it to already be in a file.


My knowledge of Python is limited to basic scripting tasks, iterating through Lists with cursors etc. I figure the "A python layer action to open a wikipedia page in QGIS" might provide part of the code that someone else could more easily come up it. Does anyone know how to pass data into a Qt4 web-browser, rather than opening a file with the data already in it?


UPDATE: I'm now very close to solving this by scripting Python to write output to a myTable.html file. But, when passing the string of data from my attribute table field [% MyFieldName %] I get an error


PYTHON


mytable = [% MyFieldName %]

(that causes: " TypeError: expected a character buffer object")


I can't pass the string of data from the [% MyFieldName %] to the mytable variable without a Python Error box popping up instead of Qt4 Browser Renderer, but using this test script below (as a single line) I can get the Qt4 Browser to popup with the text "my html table will go right here":


mytable = "my html table will go right here"; 

tabfile = open('C:\MyFolder\myTable.html', 'w');
tabfile.write(mytable);
tabfile.close();
from PyQt4.QtCore import QUrl;
from PyQt4.QtWebKit import QWebView;
myWV = QWebView(None);
myWV.load(QUrl('file:///C:/OSGeo4W/myTable.html'));
myWV.show()

The funny thing is that by changing the value of the mytable variable above to = [% MyFieldName %] causes the QGIS Action to throw up a popup PYTHON ERROR Dialog Box THAT ACTUALLY RENDERS MY HTML STRING INTO A TABLE PROPERLY, JUST LIKE I WANT IT, but followed by syntax error message and other details of the program and entire script. And so I know that [% MyFieldName %] does pass the data from QGIS (to atleast) the Python Error Dialog box which can render html tables :-/



Now when I only do a one line test script setting a Python Variable to someXYZ = [% MyFieldName %] then that generates the TypeError: expected a character buffer object




No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...