将网络浏览器 window 添加到 Tkinter window

Add web browser window to Tkinter window

我用 python tkinter 制作了一个 gui 应用程序,我想在我的 TKINTER WINDOW 中放置一个迷你的小型网络浏览器 ,而不是打开新标签,我该怎么做?

你不能。 tkinter 库中没有允许您显示 HTML 的小部件。如果你真的需要 来使用 tkinter 你可以尝试 tkinterhtml 但它很奇怪并且不适用于很多功能(超链接,图像......)

如果您只想创建一个带有 Web 界面的 python 应用程序,您最好使用 python Web 框架,例如 flask or django

这是一个老问题,但对于将来遇到这个问题的任何人来说,在 tkinter 中嵌入网页是可能的。

您可以尝试 tkinterweb (Disclaimer: I am the author). It is based on tkinterhtml,但支持超链接、样式、图像等。 只需使用 pip install tkinterweb 和 运行:

安装即可
import tkinterweb
import tkinter as tk
root = tk.Tk()
frame = tkinterweb.HtmlFrame(root)
frame.load_website(YOUR_WEBSITE)
frame.pack(fill="both", expand=True)
root.mainloop()

Tkinterweb 运行 停止使用 Tk HTML 小部件,因此复杂的网站可能无法正常工作。不过,更简单的网站运行得非常好。

另一个很好的选择是 cefpython, which is a full-blown chromium browser embedded in Tkinter. An example of using cefpython in tkinter can be found at https://github.com/cztomczak/cefpython/blob/master/examples/tkinter_.py。不幸的是,cefpython 在较新的 python 版本中确实存在一些问题,并且可能会消耗一些资源,但它确实运行良好。

如果您的 Tkinter 应用程序中需要一个完整的网络浏览器,我建议您试试 cefpython。如果您只需要真正快速和简单的东西来显示基本网页或帮助 windows,请尝试 tkinterweb。

我知道这是一个老问题,但如果您想创建网络浏览器,我建议您使用 PyQt5 windows。

这是一个基本的实现,它将打开一个自定义浏览器到 google 主页:

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.browser = QWebEngineView()
        self.browser.setUrl(QUrl('http://google.com'))
        self.setCentralWidget(self.browser)
        self.showMaximized()
app = QApplication(sys.argv)
QApplication.setApplicationName('Example Custom Browser')
window = MainWindow()
app.exec_()

除了用于执行 google 搜索之外,此浏览器毫无用处,但您可以轻松添加带有功能按钮的导航栏。一种基本方法可能如下所示:

        navbar = QToolBar()
        self.addToolBar(navbar)

        back_btn = QAction('Back', self)
        back_btn.triggered.connect(self.browser.back)
        navbar.addAction(back_btn)

        forward_btn = QAction('Forward', self)
        forward_btn.triggered.connect(self.browser.forward)
        navbar.addAction(forward_btn)

        reload_btn = QAction('Reload', self)
        reload_btn.triggered.connect(self.browser.reload)
        navbar.addAction(reload_btn)

        home_btn = QAction('Home', self)
        home_btn.triggered.connect(self.navigate_home)
        navbar.addAction(home_btn)

        self.url_bar = QLineEdit()
        self.url_bar.returnPressed.connect(self.navigate_to_url)
        navbar.addWidget(self.url_bar)

        self.browser.urlChanged.connect(self.update_url)

    def navigate_home(self):
        self.browser.setUrl(QUrl('https://www.google.com'))

    def navigate_to_url(self):
        url = self.url_bar.text()
        self.browser.setUrl(QUrl(url))

    def update_url(self, q):
        self.url_bar.setText(q.toString())

如果将其添加到 MainWindow class,您现在应该会看到按钮 'Back'、'Forward'、'Reload' 和 'Home' 在左上角。他们会做您可能希望他们做的事情,即让您前进一页、后退一页、重新加载页面或带您回家(我只是将其设置为 google.com)。

抱歉,这么长,但我希望它演示了如何简单地实现 PyQt5 浏览器 window。