日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

tkinter浏览器组件

發布時間:2024/1/8 HTML 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tkinter浏览器组件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tkinter瀏覽器組件

  • 引言
  • 構思
    • tcl方面
    • dll方面
    • 嵌入窗口!
  • 創建瀏覽器窗口
    • 語言選擇
    • 創建窗口
  • 嵌入窗口
  • 新的tkinter瀏覽器組件:2021-8-10更新
    • tkinterie的簡單使用:2021-8-16更新
    • tkinterIE的功能:2021-8-16更新
    • 新的tkinter網頁組件:2021-12-25更新
    • tkinterie使用新API:2022-4-9更新
      • tkinterie小改進:2022-6-18
  • 結語

引言

當然,tkinter原生的核心組件并沒有瀏覽器組件,這是使得tkinter與wxpython和PYQT的差距非常大的原因之一。為了使tkinter窗口能夠顯示網頁,很多人都為tkinter提供了配套綁定的瀏覽器組件==(注意是瀏覽器組件,不是html富文本框)==。以下是比較常用的方法或者綁定:

  • tkinterhtml(TkHtml的Python綁定,過時很久了,HTML4的風格,但tkinterweb做得挺好)
  • TkHtml(tkinter的瀏覽器組件dll拓展,也是比較過時的)
  • HV3(tkinter的瀏覽器組件dll拓展,與TkHtml配合使用,現代外觀,但依舊比較老)
  • cefpython(Python的谷歌綁定,保持更新,但體積大)

那么我們怎么樣才能夠做到擁有現在外觀,體積小巧的瀏覽器組件呢?

構思

tcl方面

我們知道,tkinter是對tcl/tk的綁定,如果我們在tcl組件中加入瀏覽器拓展組件,問題就解決了。但是,這種方法編寫復雜,不易成功,而且就目前使用在tcl的瀏覽器拓展,效果都與現代外觀瀏覽器差距甚遠。

dll方面

使用系統ie組件或 edgehtml.dll 等dll拓展或許是一個不錯的方法。但是結構是這樣的:先用Python注冊和使用dll的函數,再將效果傳入tcl……這明顯,超出實力范圍了……

嵌入窗口!

這是集簡單、高效、美觀為一體的方法——嵌入外部瀏覽器窗口。很多GUI語言都自帶瀏覽器組件使用方法,將這些代碼編譯成exe文件后,再將文件顯示在需要顯示的frame中,就成了tkinter的瀏覽器組件。

創建瀏覽器窗口

注意!!!,這一段內容必不可少,因為tkinter顯示網頁確實需要外部程序的支持!!!

語言選擇

為了方便,選擇 aardio語言,這個語言帶有拓展GUI界面和快捷的智能提示(國人開發的)。

創建窗口

這里直接給出 aardio 代碼:

import win.ui.minmax; import win.ui; import win.image; import web.form; /*DSG{{*/ mainForm = win.form(text="HtmlShow";left=0;top=0;right=895;bottom=700;border="thin";minimize=1;mode="popup";title=false) mainForm.add() /*}}*/Path=io._exedirwin.ui.minmax(mainForm)var wb=web.form(mainForm) wb.noScriptErr=true;arg=_CMDLINE if (arg!=null){wb.go(arg) }else {wb.go("\res\NoneHtml.html")//這行可以省略,沒必要,測試時使用 }wb.NewWindow3 = function(ppDisp,cancel,dwFlags,bstrUrlContext,bstrUrl ) { wb.go(bstrUrl)return ppDisp,true; };mainForm.show(); return win.loopMessage();

思路就是創建細邊框、無標題欄的彈出式窗口,然后最小化,使用時避免視覺干擾。最后,發布成exe文件。

嵌入窗口

在這我之前的一篇文章中,講述了如何用 win32gui 在tkinter窗口中嵌入外部窗口。如果忘記或不知道,請到我的“tkinter實驗”專欄中查找“tkinter創建真正的子窗口”。這里再次說明,我的那篇文章的方法,不僅可以嵌入tkinter窗口,還可以嵌入任何一個exe窗口(UPW應用不太穩定)。

首先,明白exe窗口標題(雖然沒有標題欄)為“HtmlShow”,其次,將exe文件放入一個目錄中,并且使用絕對路徑。

現在我們來編寫代碼:

from subprocess import Popen from tkinter import *#為了方便,一般不建議使用 import win32gui from time import sleep as slpresultframe=Frame(master)#創建frame ###using exe #Popen必須是完整路徑(絕對路徑),url為網址 Popen([TinPath+'\\data\\bin\\HtmlShow.exe',url]) slp(1)#等待窗口創建 hid=win32gui.FindWindow(None,u"HtmlShow")#獲取窗口句柄 win32gui.SetParent(hid,resultframe.winfo_id())#顯示窗口

思路和原因,在注釋已經說明了,這里就不再解釋。
TinPath為該程序的運行目錄,我將生成的HtmlShow.exe放在這個目錄的\data\bin\下

注意到外部窗口的大小已經設定好,如果想要覆蓋整個frame,還可以調整外部窗口大小或者使用win32gui.ShowWindow(hid,win32con.SW_MAXIMIZE)

效果如下:


Tin知識庫


新的tkinter瀏覽器組件:2021-8-10更新

通過對tkinter瀏覽器組件各種實現的研究中,我編寫了新的tkinter拓展——tkinterie,該模塊通過com調用系統IEFrame,啟動webview組件,為tkinter窗口提供一個webview組件。
目前該模塊已被我上傳至pypi,通過pip install tkinterie安裝。

2021-8-16更新:使用tkinterie必須保證IE的com接口可以正常訪問,也要保證有ieframe.dll,若不能使用就放棄tkinterie。

tkinterie的簡單使用:2021-8-16更新

通過pip安裝tkinterie模塊后,使用如下代碼,可以顯示HTML5元素。

注意是渲染HTML5元素,并不是一個完整的瀏覽器。

from tkinter import * from tkinterie.tkinterIE import WebViewa=Tk() a.geometry('700x500+100+100')w=WebView(a,500,500,'www.baidu.com') w.pack(expand=True,fill='both')a.mainloop()

效果如下:

tkinterIE的功能:2021-8-16更新

  • 渲染HTML5元素以及css設計(網頁或文件)
  • 運行JavaScript(網頁或文件)
  • 提供的WebView組件可以像正常tkinter組件一樣非自動或自動調整尺寸
  • 多線程使用(使用過程中可能會報錯,但不影響使用)
  • 嵌入到tkinter的Canvas和Text(若被半遮蔽可能報錯,但不影響使用)
  • 點擊新窗口鏈接在本地打開
  • 在程序內渲染HTML5元素等網頁內容
  • 自主限制edge自動打開

新的tkinter網頁組件:2021-12-25更新

為了解決IE即將壽終正寢,而且在Python中的支持不佳的問題,我基于pythonnet和pywebview寫了新的tkinter網頁組件——tkwebview2。這將允許tkinter使用Windows提供的WebView2。
具體文章

tkinterie使用新API:2022-4-9更新

考慮到之后無法直接使用InternetExplorer.Application,現在最新版的tkinterie(-1.4.0-)不再使用comtypes,而是使用pythonnet,通過 .Net 使用WinForms框架創建WebBrowser組件。

新版的tkinter有以下好處:

  • 與tkinter窗口緊密耦合
  • 可以直接操作WinForms.WebBrowser,如獲取屬性、執行方法、綁定網頁控件自身事件
  • 99%可操作度
  • 當然,有以下兩個前提:

  • 讀得懂https://docs.microsoft.com/zh-cn/dotnet/api/?view=netframework-4.8&term=webbrow中的內容
  • tkinter窗口必須在STA線程模式下運行,具體見說明
  • tkinterie小改進:2022-6-18

    添加了一些基礎方法:刷新、前一頁、下一頁、搜索界面等。


    結語

    看完這篇文章,相信你對tkinter的使用更上一層樓,tkinter還可以實現更多功能,這等待我們來探索。怎么樣,不如現在試試?

    使用pip下載:

    pip install tkinterie

    ?tkinter創新?

    總結

    以上是生活随笔為你收集整理的tkinter浏览器组件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。