首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QClipboard::dataChanged()在QtWebEngine上下文中未发出

QClipboard::dataChanged()在QtWebEngine上下文中未发出
EN

Stack Overflow用户
提问于 2022-03-19 09:35:05
回答 1查看 87关注 0票数 0

QClipboard::dataChanged()不是在QtWebEngine上下文中使用pyqt6或pyside6发出的,但是它在it 5/pyqt5 5中工作得很好,如何解决?环境:

代码语言:javascript
复制
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'
>>> 
代码语言:javascript
复制
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())
EN

回答 1

Stack Overflow用户

发布于 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环境变量来禁用沙箱。

然后,我将代码更改为:

代码语言:javascript
复制
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())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71537000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档