如何使用 QClipboard.dataChanged 信号更改剪贴板中的文本?
How to use QClipboard.dataChanged signal to change the text in clipboard?
我想将剪贴板中的所有 括号 替换为 括号,所以我在下面有这样的代码:
import sys
from functools import partial
from PyQt5 import QtWidgets
def fun(clipboard):
text=clipboard.text()
new_tex=text.replace("(","[").replace(")","]")
clipboard.setText(new_tex)
print("content:",text)
print("content:",new_tex)
app = QtWidgets.QApplication(sys.argv)
clipboard = app.clipboard()
clipboard.dataChanged.connect(partial(fun,clipboard))
sys.exit(app.exec_())
但我注意到当我在插槽函数中使用 clipboard.setText
时,它会触发信号 两次 或更多....例如我复制文本 bb(1,2,3)
,那么这是我的输出:
content: bb(1,2,3)
content: bb[1,2,3]
content:
content:
它会清除我所有的剪贴板,但实际上我只是想用bb[1,2,3]
替换剪贴板中原来的bb(1,2,3)
,如何实现?
clipboard.setText
触发信号QClipboard::dataChanged()
.
您需要删除 clipboard.setText
,或者这样做:
import sys
from functools import partial
from PyQt5 import QtWidgets
def fun(clipboard):
if not clipboard.text(): # +
return # +
text = clipboard.text()
new_tex = text.replace("(","[").replace(")","]")
clipboard.setText(new_tex) # <---
print("content: 1 ", text)
print("content: 2 ", new_tex)
app = QtWidgets.QApplication(sys.argv)
clipboard = app.clipboard()
clipboard.dataChanged.connect(partial(fun, clipboard))
sys.exit(app.exec_())
我使用一个信号来连接调用 setText()
的方法,并在一个单独的 thread.This 对我有用的数据上发送带有文本更改的信号。
我想将剪贴板中的所有 括号 替换为 括号,所以我在下面有这样的代码:
import sys
from functools import partial
from PyQt5 import QtWidgets
def fun(clipboard):
text=clipboard.text()
new_tex=text.replace("(","[").replace(")","]")
clipboard.setText(new_tex)
print("content:",text)
print("content:",new_tex)
app = QtWidgets.QApplication(sys.argv)
clipboard = app.clipboard()
clipboard.dataChanged.connect(partial(fun,clipboard))
sys.exit(app.exec_())
但我注意到当我在插槽函数中使用 clipboard.setText
时,它会触发信号 两次 或更多....例如我复制文本 bb(1,2,3)
,那么这是我的输出:
content: bb(1,2,3) content: bb[1,2,3] content: content:
它会清除我所有的剪贴板,但实际上我只是想用bb[1,2,3]
替换剪贴板中原来的bb(1,2,3)
,如何实现?
clipboard.setText
触发信号QClipboard::dataChanged()
.
您需要删除 clipboard.setText
,或者这样做:
import sys
from functools import partial
from PyQt5 import QtWidgets
def fun(clipboard):
if not clipboard.text(): # +
return # +
text = clipboard.text()
new_tex = text.replace("(","[").replace(")","]")
clipboard.setText(new_tex) # <---
print("content: 1 ", text)
print("content: 2 ", new_tex)
app = QtWidgets.QApplication(sys.argv)
clipboard = app.clipboard()
clipboard.dataChanged.connect(partial(fun, clipboard))
sys.exit(app.exec_())
我使用一个信号来连接调用 setText()
的方法,并在一个单独的 thread.This 对我有用的数据上发送带有文本更改的信号。