【发布时间】:2019-02-25 10:04:59
【问题描述】:
我用 python tkinter 制作了一个 gui 应用程序,我想在我的 TKINTER WINDOW 中放置一个小型的小型网络浏览器,而不是打开一个新标签,我该怎么做?
【问题讨论】:
标签: python-3.x tkinter python-webbrowser
我用 python tkinter 制作了一个 gui 应用程序,我想在我的 TKINTER WINDOW 中放置一个小型的小型网络浏览器,而不是打开一个新标签,我该怎么做?
【问题讨论】:
标签: python-3.x tkinter python-webbrowser
你不能。 tkinter 库中没有允许您显示 HTML 的小部件。如果您真的需要使用 tkinter,您可以尝试 tkinterhtml,但这很奇怪,并且不适用于很多功能(超链接、图像...)
如果你只是想创建一个带有 web 界面的 python 应用程序,你最好使用一个 python web 框架,如flask 或django。
【讨论】:
这是一个老问题,但对于将来遇到这个问题的人来说,在 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()
Tkinterweb 使用已停产的 Tk HTML 小部件,因此复杂的网站可能无法正常运行。不过,更简单的网站也能正常工作。
另一个不错的选择是cefpython,它是嵌入在 Tkinter 中的成熟的 chromium 浏览器。在 tkinter 中使用 cefpython 的示例可以在 https://github.com/cztomczak/cefpython/blob/master/examples/tkinter_.py 找到。不幸的是,cefpython 在较新的 python 版本中确实存在一些问题,并且可能有点消耗资源,但它确实工作得很好。
如果您需要在您的 Tkinter 应用程序中使用完整的网络浏览器,我建议您尝试使用 cefpython。如果您只需要非常快速简单的东西来显示基本网页或帮助窗口,请尝试 tkinterweb。
【讨论】:
import tkinterweb import tkinter as tk root = tk.Tk() frame = tkinterweb.HtmlFrame(root) frame.load_website("https://www.google.com") frame.place(0, 0) root.mainloop() 输出为:UserNotification: Fetching Tkhtml3 for 64-bit Windows with Python 3.7.9. Tkhtml3 found in C:\Users\ymzym.DESKTOP-TQFQIM2\AppData\Local\Programs\Python\Python37\lib\site-packages\tkinterweb\tkhtml\Windows\64-bit. UserNotification: Connecting to www.google.com.
我知道这是一个老问题,但如果您想创建网络浏览器窗口,我建议您使用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_()
除了执行 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 类,您现在应该会在左上角看到“返回”、“前进”、“重新加载”和“主页”按钮。他们会按照您的预期行事,即让您前进、后退一页、重新加载页面或带您回家(我只是将其设置为 google.com)。
抱歉,这篇文章太长了,但我希望它演示了如何简单地实现一个 PyQt5 浏览器窗口。
【讨论】: