QClipboard::dataChanged()不是在QtWebEngine上下文中使用pyqt6或pyside6发出的,但是它在it 5/pyqt5 5中工作得很好,如何解决?环境:
Python: 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)]
Flavor: Unknown
Executable: C:\Users\Oscar\AppData\Local\Programs\Python\Python39\python.exe
OS: Windows
Arch: x86_64
WindowsRelease: 10
>>> from PyQt6.QtCore import *
>>> QT_VERSION_STR
'6.2.3'
>>> PYQT_VERSION_STR
'6.2.3'
>>> from PyQt6.QtCore import *
from PyQt6.QtCore import pyqtSlot as Slot
from PyQt6.QtCore import pyqtSignal as Signal
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *
from PyQt6.QtWebEngineWidgets import *
from PyQt6.QtWebEngineCore import *
import sys
class WebEngineView(QWebEngineView): #
def __init__(self, parent=None):
super().__init__(parent)
self.page().settings().setAttribute(QWebEngineSettings.WebAttribute.JavascriptCanAccessClipboard, True)
self.load(QUrl('https://doc.qt.io/qt-6/qwebenginesettings.html'))
self.clipboard = QGuiApplication.clipboard()
self.clipboard.dataChanged.connect(self.clipboardTextChanged)
@Slot()
def clipboardTextChanged(self):
self.copiedText = self.clipboard.text()
print(self.sender(), self.copiedText)
if __name__ == "__main__":
app = QApplication(sys.argv)
webEngineView = WebEngineView()
webEngineView.show()
sys.exit(app.exec())发布于 2022-09-17 02:28:18
我找到了这里的解决方案
沙箱以某种方式阻塞WM_CLIPBOARDUPDATE消息( https://learn.microsoft.com/en-us/windows/win32/dataxchg/wm-clipboardupdate ),QPA无法通知剪贴板更改。 自https://codereview.qt-project.org/c/qt/qtwebengine/+/276060以来,窗口上的沙箱已启用 neosettler,作为一种解决方法,您可以通过--非沙箱命令行参数或通过设置QTWEBENGINE_DISABLE_SANDBOX环境变量来禁用沙箱。
然后,我将代码更改为:
from PyQt6.QtCore import *
from PyQt6.QtCore import pyqtSlot as Slot
from PyQt6.QtCore import pyqtSignal as Signal
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *
from PyQt6.QtWebEngineWidgets import *
from PyQt6.QtWebEngineCore import *
import sys
import os
class WebEngineView(QWebEngineView): #
def __init__(self, parent=None):
super().__init__(parent)
self.page().settings().setAttribute(QWebEngineSettings.WebAttribute.JavascriptCanAccessClipboard, True)
self.load(QUrl('https://doc.qt.io/qt-6/qwebenginesettings.html'))
self.clipboard = QGuiApplication.clipboard()
self.clipboard.dataChanged.connect(self.clipboardTextChanged)
@Slot()
def clipboardTextChanged(self):
self.copiedText = self.clipboard.text()
print(self.copiedText)
if __name__ == "__main__":
sys.argv.append('--no-sandbox')
print(sys.argv)
app = QApplication(sys.argv)
webEngineView = WebEngineView()
webEngineView.show()
sys.exit(app.exec())https://stackoverflow.com/questions/71537000
复制相似问题