将 Web 浏览器窗口添加到 Tkinter 窗口

sss*_*sss 8 tkinter python-3.x python-webbrowser

我用 python tkinter 制作了一个 GUI 应用程序,我想在我的 tKinter windown 中放置一个迷你网页浏览器,而不打开新选项卡。我怎样才能做到这一点?

And*_*doo 6

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

您可以尝试tkinterweb(免责声明:我是作者)。它基于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()
Run Code Online (Sandbox Code Playgroud)

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

另一个不错的选择是cefpython,它是嵌入 Tkinter 中的成熟的 chromium 浏览器。在 tkinter 中使用 cefpython 的示例可以在https://github.com/cztomczak/cefpython/blob/master/examples/tkinter_.py找到。不幸的是,cefpython 对于较新的 python 版本确实存在一些问题,并且可能会消耗一些资源,但它确实工作得很好。

如果您的 Tkinter 应用程序需要完整的网络浏览器,我建议您尝试 cefpython。如果您只需要非常快速且简单的东西来显示基本网页或帮助窗口,请尝试 tkinterweb。


God*_*tus 6

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

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

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_()
Run Code Online (Sandbox Code Playgroud)

除了执行谷歌搜索之外,这个浏览器几乎没什么用处,但您可以添加带有功能按钮的导航栏,只需很少的额外努力。一种基本方法可能如下所示:

        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())
Run Code Online (Sandbox Code Playgroud)

如果将其添加到MainWindow类中,您现在应该在左上角看到“后退”、“前进”、“重新加载”和“主页”按钮。他们会做你可能期望的事情,即向前、向后一页、重新加载页面或带你回家(我只是将其设置为 google.com)。

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


Syl*_*NFF 4

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

如果你只想创建一个带有 Web 界面的 Python 应用程序,你最好使用像Flaskdjango这样的 Python Web 框架。