Как создать средство просмотра файлов HTML с помощью WxPython

Хотя существуют более сложные и специализированные инструменты, такие как CEF, для поддержки отображения данных HTML в окне, многие фреймворки пользовательского интерфейса также предлагают ту же функцию, но не такую ​​мощную, но в основном она должна работать для большинства общих функций.

WxPython не является исключением, так как вы можете отображать некоторые HTML-данные также с помощью класса Html Window. Целью этого класса является отображение страниц с обогащенным содержимым (локальный файл или загруженный по протоколу HTTP) в окне на основе подмножества стандарта HTML. Ширина окна постоянна — задана в конструкторе — и виртуальная высота изменяется динамически в зависимости от размера страницы. В следующем примере показано, как отобразить необработанные данные HTML в новом окне или из файла:

import  wx
import  wx.html
class MyHtmlFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(
self,
parent,
-1,
title,
size = (600,400)
)
# Use current window as container of the Html Frame
html = wx.html.HtmlWindow(self)
if "gtk2" in wx.PlatformInfo:
html.SetStandardFonts()
# Alternatively render raw HTML with the SetPage method
# html.SetPage("

Hello World

") # Render a local HTML file html.LoadPage("C:\\Users\\sdkca\\Desktop\\python-sandbox\\index.html") app = wx.App() frm = MyHtmlFrame(None, "Simple HTML File Viewer") frm.Show() app.MainLoop()

Полный пример с подборщиком файлов

Чтобы полностью понять, как работает логика рендеринга HTML-файлов, вы можете увеличить сложность примера, добавив системный файл выбора, чтобы выбрать файл для рендеринга в программе просмотра:

import os
import wx
import wx.html
FileFilter =    "Html files (*.html)|*.html|" \
"All files (*.*)|*.*"
class MyApp(wx.Frame):
# ----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self,
None,
wx.ID_ANY,
"HTML Viewer with File picker"
)
# Create a panel within the frame
panel = wx.Panel(self, wx.ID_ANY)
self.currentDirectory = os.getcwd()
# Create the filepicker button and add the 'onOpenFile' binding
openFileDlgBtn = wx.Button(
panel,
label = "Choose an HTML File"
)
openFileDlgBtn.Bind(wx.EVT_BUTTON, self.onOpenFile)
# Put the button in a sizer
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(openFileDlgBtn, 0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(sizer)
# ----------------------------------------------------------------------
"""
Create and show the Open FileDialog
"""
def onOpenFile(self, event):
dlg = wx.FileDialog(
self,
message = "Choose a file",
defaultDir = self.currentDirectory,
defaultFile = "",
wildcard = wildcard,
style = wx.FD_OPEN | wx.FD_CHANGE_DIR
)
## If the user selects a file, open it in the Html File Viewer
if dlg.ShowModal() == wx.ID_OK:
htmlFilePath = dlg.GetPath()
# Create a new instance of the HtmlViewer
htmlViewerInstance = HtmlViewer(None, htmlFilePath)
htmlViewerInstance.Show()
dlg.Destroy()
# The HtmlViewer class expects the path of the HTML file
# to open it in a new window of the HtmlWindow type
class HtmlViewer(wx.Frame):
def __init__(self, parent, filepath):
wx.Frame.__init__(
self,
parent,
-1,
"HTML Viewer",
size = (800, 600)
)
# Open a new HtmlWindow that is capable of rendering such content
html = wx.html.HtmlWindow(self)
self.Maximize(True)
if "gtk2" in wx.PlatformInfo:
html.SetStandardFonts()
# Load the selected file in the viewer !
html.LoadPage(filepath)
# Run the program !
if __name__ == "__main__":
app = wx.App(False)
frame = MyApp()
frame.Show()
app.MainLoop()

Изначально вы получите фрейм с одной кнопкой, которая позволяет вам открывать средство выбора файлов и выбирать файл HTML. Как только вы выберете файл, появится новый фрейм со средством просмотра HTML и содержимым выбранного html-файла.

Ссылка на основную публикацию
Adblock
detector