【发布时间】:2021-05-13 15:22:33
【问题描述】:
环境:
Python 3.7 PyQT5 5.15.2
我有一个带有一些链接和 Youtube 视频的 GUI,嵌入在 QWidget 中。
GUI 是一个用户界面。我已经用 Python PyQT5 完成了我的软件。 我想在我的 GUI 中展示一些来自 YOutube 的视频教程。
所以我将 youtube iframe HTML 代码合并到 Qwidget 中(vlayout 和 webview,请参见下面的代码)。
GUI 加载正常,视频播放良好。但是它们太小了。所以我的用户会点击视频上的 youtube 链接:
当我在播放视频时单击此 Youtube 链接时,它会从我的浏览器中打开一个 youtube 视频页面。直接从 youtube 而不是从我的 GUI 观看它很有用。 但是链接不起作用。它什么也没做。出了点问题。
所以我尝试使用“setOpenExternalLinks”和“centralwid”,但它不起作用。我的 youtube 的小部件没有此属性。
AttributeError: 'QWidget' object has no attribute 'setOpenExternalLinks'
为什么?
这里是一些 youtube 视频和标签的代码:
# Code for 1 Youtube video and its QtWidget
# ======================================================================================
self.centralwid = QtWidgets.QWidget(self.tab_run)
self.centralwid.setGeometry(QtCore.QRect(60, 40, 410, 258))
self.centralwid.setObjectName("centralwid")
self.label_loading_browsers = QtWidgets.QLabel(self.centralwid)
# ===================== HERE IS THE CODE FOR IFRAM YOUTUBE ============================
self.vlayout = QtWidgets.QVBoxLayout()
self.webview = QtWebEngineWidgets.QWebEngineView()
self.webview.settings().setAttribute(QWebEngineSettings.FullScreenSupportEnabled, True)
self.webview.page().fullScreenRequested.connect(lambda request: request.accept())
baseUrl = "local"
htmlString = """
<iframe width="350" height="212" src="https://www.youtube.com/embed/g8NVwN0_mks?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
"""
self.webview.setHtml(htmlString, QUrl(baseUrl))
self.vlayout.addWidget(self.webview)
self.centralwid.setLayout(self.vlayout)
我搜索我的对象 qwidget 的所有属性和方法。 我添加了这两行,但它没有改变任何东西:
self.webview.settings().setAttribute(QWebEngineSettings.LocalContentCanAccessRemoteUrls, True)
self.webview.settings().setAttribute(QWebEngineSettings.AllowRunningInsecureContent, True)
这里是MiniMum Reproductable COde(只需复制粘贴到py文件中并执行,您可能需要调整gui窗口的大小才能看到视频)
import sys
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import QUrl, Qt
from PyQt5 import QtWebEngineWidgets
from PyQt5.QtWebEngineWidgets import QWebEngineSettings
# Subclass QMainWindow to customise your application's main window
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("My Awesome App")
label = QLabel("This is a PyQt5 window!")
# The `Qt` namespace has a lot of attributes to customise
# widgets. See: http://doc.qt.io/qt-5/qt.html
label.setAlignment(Qt.AlignCenter)
# Set the central widget of the Window. Widget will expand
# to take up all the space in the window by default.
self.setCentralWidget(label)
# Code for 1 Youtube video and its QtWidget
# ======================================================================================
self.centralwid = QtWidgets.QWidget(self)
self.centralwid.setGeometry(QtCore.QRect(60, 40, 410, 258))
self.centralwid.setObjectName("centralwid")
self.label_loading_browsers = QtWidgets.QLabel(self.centralwid)
# ===================== HERE IS THE CODE FOR IFRAM YOUTUBE ============================
self.vlayout = QtWidgets.QVBoxLayout()
self.webview = QtWebEngineWidgets.QWebEngineView()
self.webview.settings().setAttribute(QWebEngineSettings.FullScreenSupportEnabled, True)
self.webview.settings().setAttribute(QWebEngineSettings.LocalContentCanAccessRemoteUrls, True)
self.webview.settings().setAttribute(QWebEngineSettings.AllowRunningInsecureContent, True)
self.webview.page().fullScreenRequested.connect(lambda request: request.accept())
baseUrl = "local"
htmlString = """
<iframe width="350" height="212" src="https://www.youtube.com/embed/g8NVwN0_mks?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
"""
self.webview.setHtml(htmlString, QUrl(baseUrl))
self.vlayout.addWidget(self.webview)
self.centralwid.setLayout(self.vlayout)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
【问题讨论】:
-
您是否尝试过将
IPython.display.IFrame()与 PyQT5 一起使用?通常在 Jupyter Notebooks 中完成工作 -
感谢@eyllanesc 的帮助。我从来没有听说过这种方法。我找不到任何在 PyQT5 gui 上使用“IPython.display.IFrame()”显示 youtube iframe 的教程
-
1) 您的问题不清楚,2) 提供 MRE,3) 解释它不起作用对您意味着什么,4) 您提供的链接表明该视频不再存在。
-
很抱歉给您带来不便。让我编辑问题。
-
我用更多的解释重新阐述了我的问题。您可以通过在任何 PyQT5 GUI 中复制粘贴我的代码来重现问题。它将显示 youtube 框架。播放视频并尝试点击链接(标题)。
标签: python python-3.x pyqt pyqt5