国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 用Python中的wxPython實(shí)現(xiàn)最基本的瀏覽器功能

用Python中的wxPython實(shí)現(xiàn)最基本的瀏覽器功能

2020-06-06 11:07腳本之家 Python

這篇文章主要介紹了用Python中的wxPython實(shí)現(xiàn)基本的瀏覽器功能,本文來(lái)自于IBM官方網(wǎng)站開發(fā)者文檔,需要的朋友可以參考下

通常,大多數(shù)應(yīng)用程序通過(guò)保持 HTML 簡(jiǎn)單來(lái)解決大多數(shù)瀏覽器問題 ― 或者說(shuō),根據(jù)最低共同特性來(lái)編寫。然而,即便如此,也仍然存在字體和布局的問題,發(fā)行新瀏覽器和升級(jí)現(xiàn)有瀏覽器時(shí),也免不了測(cè)試應(yīng)用程序的痛苦。替代方案 ― 只支持一種瀏覽器 ― 通常不是一種用戶友好的解決方案。

明顯的解決方案是在應(yīng)用程序中嵌入自己的表現(xiàn) HTML 的窗口構(gòu)件。當(dāng)然,從頭開始編寫這樣的窗口構(gòu)件工作量很大,因此,求助于預(yù)先封裝的解決方案好象是合理的。

商界有許多選擇及幾個(gè)開放源碼軟件包。本文將向您顯示如何以 Python 作為綁定的語(yǔ)言選擇(也支持 C++、Perl 和其它語(yǔ)言)使用作為 wxWindows 軟件包一部分分發(fā)的 wxHtml 窗口構(gòu)件。

雖然沒有任何 wxPython 經(jīng)驗(yàn)而熟諳 Python 的開發(fā)人員應(yīng)該能夠從頭開始,但本文還是假定您具有基本的 wxPython 知識(shí)。在本文中,我們將創(chuàng)建一個(gè)獨(dú)立的瀏覽器應(yīng)用程序,同時(shí),保持體系結(jié)構(gòu)足夠簡(jiǎn)單以致將瀏覽器功能遷移到現(xiàn)有的應(yīng)用程序中是一項(xiàng)簡(jiǎn)單的任務(wù)。
世界上最基本的瀏覽器

第一步是組裝支持使用 wxHtml 窗口構(gòu)件的應(yīng)用程序所必需的最少代碼。下列代碼實(shí)現(xiàn)用 wxHtml 窗口構(gòu)件作為其主窗口內(nèi)容的基本 wxPython 應(yīng)用程序。
清單 1. 基本示例瀏覽器代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from wxPython.wx import *
from wxPython.html import *
import os,sys
class exHtmlWindow(wxHtmlWindow):
  def __init__(self, parent, id, frame):
   wxHtmlWindow.__init__(self,parent,id)
class exHtmlPanel(wxPanel):
  def __init__(self, parent, id, frame):
   wxPanel.__init__(self,parent,-1)
   self.html = exHtmlWindow(self, -1, frame)
   self.box = wxBoxSizer(wxVERTICAL)
   self.box.Add(self.html, 1, wxGROW)
   self.SetSizer(self.box)
   self.SetAutoLayout(true)
class exFrame (wxFrame):
  def __init__(self, parent, ID, title):
   wxFrame.__init__(self,parent,ID,title,wxDefaultPosition,wxSize(600,750))
   panel = exHtmlPanel(self, -1, self)
class exApp(wxApp):
  def OnInit(self):
   frame = exFrame(NULL, -1, "Example Browser")
   frame.Show(true)
   self.SetTopWindow(frame)
   return true
app = exApp(0)
app.MainLoop()

假定您已正確安裝 wxPython,那么在 Python 解釋器中運(yùn)行上述代碼將產(chǎn)生一個(gè)具有空的白面板(wxHtml 窗口構(gòu)件)的大窗口。如果出現(xiàn)任何語(yǔ)法錯(cuò)誤,請(qǐng)檢查空格問題 ― 尤其是如果您將代碼剪切粘貼到解釋器或編輯器的情況。如果 Python 解釋器顯示無(wú)法導(dǎo)入 wxPython,請(qǐng)檢查安裝以確保安裝正確。

當(dāng)然,一啟動(dòng)該瀏覽器,立刻出現(xiàn)的是:我們?nèi)鄙倌承〇|西 ... 例如裝入頁(yè)面的機(jī)制。對(duì)于某些應(yīng)用程序,這一非常基本的設(shè)置實(shí)際上可能已經(jīng)夠了 — 如果您已知道您要交付什么,那么用戶就無(wú)需選擇自己的頁(yè)面。簡(jiǎn)單的更改是向 exHtmlPanel 傳遞額外的參數(shù),那就是您想訪問的頁(yè)面:
清單 2. 修改 exHtmlPanel 以裝入頁(yè)面

?
1
2
3
4
5
6
7
8
9
class exHtmlPanel(wxPanel):
+  def __init__(self, parent, id, frame, file):
   wxPanel.__init__(self, parent, -1)
   self.html = exHtmlWindow(self, -1, frame)
   self.box = wxBoxSizer(wxVERTICAL)
   self.box.Add(self.html, 1, wxGROW)
   self.SetSizer(self.box)
   self.SetAutoLayout(true)
+   self.html.LoadPage(file)

為了使之更獨(dú)立也為了使之更象瀏覽器,我們將擴(kuò)展 ttHtmlPanel 類以添加一些執(zhí)行標(biāo)準(zhǔn)瀏覽器任務(wù)的按鈕。當(dāng)然,如果您實(shí)際上是計(jì)劃構(gòu)建一個(gè)真正的瀏覽器應(yīng)用程序,那么在 GUI 設(shè)計(jì)和可用性方面您可能要考慮的比我們這里做的更多。
清單 3. 修改 ttHtmlPanel 以添加按鈕

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class ttHtmlPanel(wxPanel):
  def __init__(self, parent, id, frame):
   wxPanel.__init__(self, parent, -1)
   self.frame = frame
   self.cwd = os.path.split(sys.argv[0])[0]
   if not self.cwd:
     self.cwd = os.getcwd
   self.html = ttHtmlWindow(self, -1, self.frame)
   self.box = wxBoxSizer(wxVERTICAL)
   self.box.Add(self.html, 1, wxGROW)
   subbox = wxBoxSizer(wxHORIZONTAL)
   btn = wxButton(self, 1202, "Load File")
   EVT_BUTTON(self, 1202, self.OnLoadFile)
   subbox.Add(btn, 1, wxGROW | wxALL, 2)
   btn = wxButton(self, 1203, "Load Page")
   EVT_BUTTON(self, 1203, self.OnLoadPage)
   subbox.Add(btn, 1, wxGROW | wxALL, 2)
   btn = wxButton(self, 1204, "Back")
   EVT_BUTTON(self, 1204, self.OnBack)
   subbox.Add(btn, 1, wxGROW | wxALL, 2)
   btn = wxButton(self, 1205, "Forward")
   EVT_BUTTON(self, 1205, self.OnForward)
   subbox.Add(btn, 1, wxGROW | wxALL, 2)
   self.box.Add(subbox, 0, wxGROW)
   self.SetSizer(self.box)
   self.SetAutoLayout(true)
  def OnLoadPage(self, event):
   dlg = wxTextEntryDialog(self, 'Location:')
   if dlg.ShowModal() == wxID_OK:
     self.destination = dlg.GetValue()
   dlg.Destroy()
   self.html.LoadPage(self.destination)
  def OnLoadFile(self, event):
   dlg = wxFileDialog(self, wildcard = '*.htm*', style=wxOPEN)
   if dlg.ShowModal():
     path = dlg.GetPath()
     self.html.LoadPage(path)
   dlg.Destroy()
  def OnBack(self, event):
   if not self.html.HistoryBack():
     wxMessageBox("No more items in history!")
  def OnForward(self, event):
   if not self.html.HistoryForward():
     wxMessageBox("No more items in history!")

如果您以前使用過(guò) wxPython 或任何其它 Python 圖形工具箱,那么您可以發(fā)現(xiàn)我們做的所有事情就是向面板添加另一個(gè)容器并將四個(gè)按鈕置于其中,帶有對(duì) exHtmlPanel 類中所添加的方法的回調(diào)函數(shù)。基礎(chǔ) wxHtml 類巧妙地為我們管理歷史,因此, OnBack 和 OnForward 僅僅是對(duì)基礎(chǔ)方法的調(diào)用。

假定讀到這些時(shí)您已一直在使用 Python 解釋器,那么您可能注意到:如果關(guān)閉應(yīng)用程序,它從不將控制返回給控制臺(tái)。這個(gè)問題解決起來(lái)很簡(jiǎn)單,但我們可能應(yīng)該添加一個(gè)菜單欄來(lái)提供具有退出選項(xiàng)的文件菜單:
清單 4. 修改 exFrame 以添加帶有退出的文件菜單

?
1
2
3
4
5
6
7
8
9
10
11
12
class exFrame(wxFrame):
  def __init__(self, parent, ID, title):
   wxFrame.__init__(self, parent, ID, title, wxDefaultPosition, wxSize(600,750))
   panel = exHtmlPanel (self, -1, self)
   mnu_file = wxMenu()
   mnu_file.Append(101, "E&xit", "Exit the browser")
   menuBar = wxMenuBar()
   menuBar.Append(mnu_file, "F&ile")
   self.SetMenuBar(menuBar)
   EVT_MENU(self, 101, self.Exit)
  def Exit(self, event):
   self.Close(true)

當(dāng)我們沒有試圖將它變?yōu)橐粋€(gè)真正的瀏覽器的時(shí)候,我們?cè)诮Y(jié)尾處發(fā)現(xiàn)少了兩個(gè)添加項(xiàng):大多數(shù)瀏覽器都有狀態(tài)欄,并且您可能注意到了沒有繪制任何圖像。下列對(duì) exApp 、 exFrame 和 exHtmlPanel 的修改添加了一個(gè)狀態(tài)欄以及所有來(lái)自 wxPython 的內(nèi)置圖像支持:
清單 5. 添加狀態(tài)欄及圖像支持

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class exApp(wxApp):
  def OnInit(self):
+   wxInitAllImageHandlers()
   frame = exFrame(NULL, -1, "Example Browser")
   frame.Show(true)
   self.SetTopWindow(frame)
   return true
class exHtmlPanel(wxPanel):
  def __init__(self, parent, id, frame):
   wxPanel.__init__(self, parent, -1)
   self.frame = frame
   self.cwd = os.path.split(sys.argv[0])[0]
   if not self.cwd:
     self.cwd = os.getcwd
   self.html = exHtmlWindow(self, -1, self.frame)
+   self.html.SetRelatedFrame(self.frame, "%s")
+   self.html.SetRelatedStatusBar(0)
...
class exFrame(wxFrame):
  def __init__(self, parent, ID, title):
   wxFrame.__init__(self, parent, ID, title, wxDefaultPosition, wxSize(600,750))
   panel = exHtmlPanel (self, -1, self)
+   self.CreateStatusBar()
+   self.SetStatusText("Default status bar")
...

現(xiàn)在,基本瀏覽器的功能應(yīng)該齊全了。wxPython 的高級(jí)特性允許您創(chuàng)建自己的標(biāo)記,可以通過(guò)定制代碼來(lái)處理這些標(biāo)記以執(zhí)行您選擇的任何操作。對(duì)您自己的可定制嵌入式瀏覽器的控制為增強(qiáng)的報(bào)表生成及聯(lián)機(jī)幫助提供了無(wú)限的可能性。

這些代碼本身就可以輕易為任意數(shù)目的應(yīng)用程序提供基礎(chǔ),并且 ― 沒有理由將您限制在僅僅提供聯(lián)機(jī)幫助上。請(qǐng)自由使用這些類,看看能讓它們發(fā)生什么有趣的行為。:-)

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 一区亚洲| 欧美一区二区三区在线看 | 国产黄色大全 | 国产另类ts人妖一区二区 | 91精品久久久久久久久中文字幕 | 一本一本久久a久久精品综合妖精 | 国产精品久久国产精品 | 懂色av一区二区三区免费观看 | 91原创国产 | 中文字幕一区二区三区四区 | 国产精品久久久久国产a级 国产免费久久 | 中文av在线播放 | 欧美日韩亚洲一区二区三区 | 亚洲精品在线免费看 | 国产福利精品一区 | 日日精品 | 无毛av| 日韩成人一区 | 国产精品国产三级国产aⅴ 亚洲精品免费在线观看 | 日韩专区中文字幕 | 日韩精品日韩激情日韩综合 | 中文字幕精品一区二区三区精品 | 亚洲国产一区二区三区 | 久久亚| 成人av一区二区三区 | 久热免费视频 | 狠狠久久婷婷 | 日韩在线一区二区三区 | 精品中文字幕在线 | 成人免费影院 | 久久久久久国产精品mv | 午夜伦4480yy私人影院 | 一区二区三区日韩在线 | 精品三级三级三级三级三级 | 成人黄网在线观看 | 精品久久久久久久人人人人传媒 | 国产日韩欧美在线 | 精品欧美一区二区久久久伦 | 亚洲福利一区二区 | 精品久久久久久国产 | a国产视频|