gpt4 book ai didi

python - QClipboard::dataChanged() 的槽被调用两次

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:06 27 4
gpt4 key购买 nike

当我在这段代码中复制Google Chrome地址栏中的url时,QClipboard::dataChanged()的插槽DetectClipboardUrl有时会被调用两次,在Win7 32位上使用PyQt5.7,Python3.5进行测试,也在Linux Mint 18上进行了测试, 虽然我只需要调用该插槽一次,但这是一个错误吗?有什么解决办法吗?

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


class MainWindow(QTableView):

def __init__(self, parent=None):
super().__init__(parent)
self.clipboard = QApplication.clipboard()
self.clipboard.dataChanged.connect(self.detectClipboardUrl)

@pyqtSlot()
def detectClipboardUrl(self):
print(self.clipboard.text())



if __name__ == "__main__":
app = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())

最佳答案

如果更改重复,您可以执行以下操作:

class MainWindow(QTableView):
def __init__(self, parent=None):
self.clipboard = QApplication.clipboard()
self._cb_last = hash(self.clipboard.text())
self.clipboard.dataChanged.connect(self.detectClipboardUrl)

@pyqtSlot()
def detectClipboardUrl(self):
text = self.clipboard.text()
cb_current = hash(text)
if cb_current != self._cb_last:
print('clipboard text changed:', text)
self._cb_last = cb_current

使用哈希的原因只是为了避免在内存中保留非常大的字符串。

或者,如果两个信号非常接近地到达,您可以使用 QTimer 来阻止第一个信号发生后几毫秒内发生的任何更改。

更新:

正如我所怀疑的,该问题是由 Chromium 中的错误引起的:请参阅 Issue 173691 .

关于python - QClipboard::dataChanged() 的槽被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39191394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com