PyQt WebEngineView 干扰 MainMenu
PyQt WebEngineView interferes with MainMenu
我正在尝试创建一个包含网络浏览器的应用程序,但是当我添加网络浏览器时,我的菜单栏在视觉上消失了,但功能仍然存在。以下是两张图片,一张显示 "self.centralWidget(self.web_widget)" 被注释掉,另一张显示该行被注释掉 运行。如果您 运行 示例代码,您还会看到虽然整个网页在视觉上看起来好像菜单栏不存在一样,但您必须稍微点击每个输入字段和按钮下方才能激活它,表现得好像菜单栏确实存在一样。
Web 小部件已注释掉
Web 小部件已激活
示例代码
import os
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import *
class WebPage(QWebEngineView):
def __init__(self, parent=None):
QWebEngineView.__init__(self)
self.current_url = ''
self.load(QUrl("https://facebook.com"))
self.loadFinished.connect(self._on_load_finished)
def _on_load_finished(self):
print("Url Loaded")
class MainWindow(QMainWindow):
def __init__(self, parent=None):
# Initialize the Main Window
super(MainWindow, self).__init__(parent)
self.create_menu()
self.add_web_widet()
self.show()
def create_menu(self):
''' Creates the Main Menu '''
self.main_menu = self.menuBar()
self.main_menu_actions = {}
self.file_menu = self.main_menu.addMenu("Example File Menu")
self.file_menu.addAction(QAction("Testing Testing", self))
def add_web_widet(self):
self.web_widget = WebPage(self)
self.setCentralWidget(self.web_widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.showMaximized()
sys.exit(app.exec_()) # only need one app, one running event loop
开发环境
Windows10、PyQt5、pyqt5-5.9
编辑
问题似乎与菜单栏没有直接关系。即使删除菜单栏,问题仍然存在。也就是说,从 showMaximized() 更改为 showFullScreen() 似乎可以解决问题。
我不再认为这是 PyQt5 的问题,而是图形驱动程序的问题。具体来说,如果您查看 Atlassian 的 HipChat 应用程序,它有一个类似的问题,记录在此处:
https://jira.atlassian.com/browse/HCPUB-3177
有些人能够通过 运行 从命令提示符添加“--disable-gpu”的应用程序来解决问题,但这对我的 python 应用程序不起作用。另一方面,回滚英特尔(R) 高清显卡驱动程序确实解决了我的问题。版本 21.20.16.4627 似乎是导致问题的版本。
我正在尝试创建一个包含网络浏览器的应用程序,但是当我添加网络浏览器时,我的菜单栏在视觉上消失了,但功能仍然存在。以下是两张图片,一张显示 "self.centralWidget(self.web_widget)" 被注释掉,另一张显示该行被注释掉 运行。如果您 运行 示例代码,您还会看到虽然整个网页在视觉上看起来好像菜单栏不存在一样,但您必须稍微点击每个输入字段和按钮下方才能激活它,表现得好像菜单栏确实存在一样。
Web 小部件已注释掉
Web 小部件已激活
示例代码
import os
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import *
class WebPage(QWebEngineView):
def __init__(self, parent=None):
QWebEngineView.__init__(self)
self.current_url = ''
self.load(QUrl("https://facebook.com"))
self.loadFinished.connect(self._on_load_finished)
def _on_load_finished(self):
print("Url Loaded")
class MainWindow(QMainWindow):
def __init__(self, parent=None):
# Initialize the Main Window
super(MainWindow, self).__init__(parent)
self.create_menu()
self.add_web_widet()
self.show()
def create_menu(self):
''' Creates the Main Menu '''
self.main_menu = self.menuBar()
self.main_menu_actions = {}
self.file_menu = self.main_menu.addMenu("Example File Menu")
self.file_menu.addAction(QAction("Testing Testing", self))
def add_web_widet(self):
self.web_widget = WebPage(self)
self.setCentralWidget(self.web_widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.showMaximized()
sys.exit(app.exec_()) # only need one app, one running event loop
开发环境 Windows10、PyQt5、pyqt5-5.9
编辑
问题似乎与菜单栏没有直接关系。即使删除菜单栏,问题仍然存在。也就是说,从 showMaximized() 更改为 showFullScreen() 似乎可以解决问题。
我不再认为这是 PyQt5 的问题,而是图形驱动程序的问题。具体来说,如果您查看 Atlassian 的 HipChat 应用程序,它有一个类似的问题,记录在此处: https://jira.atlassian.com/browse/HCPUB-3177
有些人能够通过 运行 从命令提示符添加“--disable-gpu”的应用程序来解决问题,但这对我的 python 应用程序不起作用。另一方面,回滚英特尔(R) 高清显卡驱动程序确实解决了我的问题。版本 21.20.16.4627 似乎是导致问题的版本。