A File menu was added with self.menuBar().addMenu("&File")
assigning the F
key as a Alt-shortcut.
Once we have the menu object, we can can add QAction
objects
to it to create the entries. We create two basic entries here
for opening and saving HTML files (from a local disk). These both require
custom slot method.
file_menu = self.menuBar().addMenu("&File")
open_file_action = QAction( QIcon( os.path.join('icons','disk--arrow.png') ), "Open file...", self)
open_file_action.setStatusTip("Open from file")
open_file_action.triggered.connect( self.open_file )
file_menu.addAction(open_file_action)
save_file_action = QAction( QIcon( os.path.join('icons','disk--pencil.png') ), "Save Page As...", self)
save_file_action.setStatusTip("Save current page to file")
save_file_action.triggered.connect( self.save_file )
file_menu.addAction(save_file_action)
The slot method for opening a file uses the built-in
QFileDialog.getOpenFileName()
method to create a
file-open dialog and get a name. We restrict the names by
default to files matching \*.htm
or *.html
.
We read the file into a variable html
using standard
Python functions, then use .setHtml()
to load the HTML
into the browser.
def open_file(self):
filename, _ = QFileDialog.getOpenFileName(self, "Open file", "",
"Hypertext Markup Language (*.htm *.html);;"
"All files (*.*)")
if filename:
with open(filename, 'r') as f:
html = f.read()
self.browser.setHtml( html )
self.urlbar.setText( filename )
Similarly to save the HTML from the current page,
we use the built-in QFileDialog.getSaveFileName()
to
get a filename. However, this time we get the HTML
from self.browser.page().toHtml()
and write it
to the selected filename. Again we use standard
Python functions for the file handler.
def save_file(self):
filename, _ = QFileDialog.getSaveFileName(self, "Save Page As", "",
"Hypertext Markup Language (*.htm *html);;"
"All files (*.*)")
if filename:
html = self.browser.page().toHtml()
with open(filename, 'w') as f:
f.write(html)
Now we have the basic file operations in place. In the next part we'll next improve the interface further by adding a custom Help & About dialog to inform our users.
Create GUI Applications with Python & Qt5 by Martin Fitzpatrick — (PyQt5 Edition) The hands-on guide to making apps with Python — Over 10,000 copies sold!