尝试使用按钮从其他线程复制文本
Trying to copy text from other threads using a button
我正在尝试找出一种方法来制作一个像样的复制到剪贴板按钮功能,我可以从 QTextEdit 小部件内的其他线程复制文本值。
我从其他线程中提取值并将它们显示在 QTextEdit 小部件中,并且一直在尝试使用按钮成功地将 QTextEdit 的内容复制到剪贴板,但我能够做到的唯一方法是下面的代码。
我不喜欢复制按钮为了复制内容而进行第二次调用。
有没有什么方法可以使用 get_button
按钮从第一个请求中存储值,并且可以使用复制按钮进行复制,而无需再次进行相同的调用?谢谢
from PyQt4 import QtCore, QtGui
import sys
class WorkerThread(QtCore.QThread):
get_String = QtCore.pyqtSignal(str)
def __init__(self):
super(WorkerThread, self).__init__()
def run(self):
self.get_String.emit('Some text.')
class GUI(QtGui.QWidget):
def __init__(self):
super(GUI, self).__init__()
self.get_Button = QtGui.QPushButton('Get')
self.c_Button = QtGui.QPushButton('Copy')
self.text_Box = QtGui.QTextEdit(self)
vbox = QtGui.QVBoxLayout(self)
vbox.addWidget(self.get_Button)
vbox.addWidget(self.c_Button)
vbox.addWidget(self.text_Box)
vbox.addStretch()
self.setGeometry(300, 300, 300, 300)
self.show()
self._thread = WorkerThread()
self.get_Button.clicked.connect(self.doIt)
self._thread.get_String.connect(self.text_Box.append)
self.c_Button.clicked.connect(self.copy_Stuff)
def copy_Stuff(self):
self.clipboard = QtGui.QApplication.clipboard()
self._thread.get_String.connect(self.clipboard.setText)
self._thread.start()
def doIt(self):
self.text_Box.clear()
self.text_Box.setText('')
self._thread.start()
def main():
app = QtGui.QApplication(sys.argv)
gui = GUI()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
事实证明这比我最初想象的要容易得多。我对如何正确复制文本感到困惑,因为我在其他示例和帖子中看到了各种不同的复制方式。在阅读了一段时间的文档并尝试更多地了解 pyqt 之后,我发现它就像使用这两行一样简单...
self.text_Box.selectAll()
self.text_Box.copy()
通过这两行和我的按钮,它似乎复制了 QTextEdit 小部件的所有内容,这是我真正需要的。这是我的最终工作代码,以防其他人发现它有用。
from PyQt4 import QtCore, QtGui
import sys
class WorkerThread(QtCore.QThread):
get_String = QtCore.pyqtSignal(str)
def __init__(self):
super(WorkerThread, self).__init__()
def run(self):
self.get_String.emit('Some text.')
class GUI(QtGui.QWidget):
def __init__(self):
super(GUI, self).__init__()
self.get_Button = QtGui.QPushButton('Get')
self.c_Button = QtGui.QPushButton('Copy')
self.text_Box = QtGui.QTextEdit(self)
vbox = QtGui.QVBoxLayout(self)
vbox.addWidget(self.get_Button)
vbox.addWidget(self.c_Button)
vbox.addWidget(self.text_Box)
vbox.addStretch()
self.setGeometry(300, 300, 300, 300)
self.show()
self._thread = WorkerThread()
self.get_Button.clicked.connect(self.doIt)
self._thread.get_String.connect(self.text_Box.append)
self.c_Button.clicked.connect(self.copy_Stuff)
def copy_Stuff(self):
self.text_Box.selectAll()
self.text_Box.copy()
def doIt(self):
self.text_Box.clear()
self.text_Box.setText('')
self._thread.start()
def main():
app = QtGui.QApplication(sys.argv)
gui = GUI()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
此代码示例显示了一个简单的工作线程,其信号为 returns 主值,在 QTextEdit 小部件中显示该值以及如何使用单个按钮复制 QTextEdit 小部件的所有内容点击
我正在尝试找出一种方法来制作一个像样的复制到剪贴板按钮功能,我可以从 QTextEdit 小部件内的其他线程复制文本值。
我从其他线程中提取值并将它们显示在 QTextEdit 小部件中,并且一直在尝试使用按钮成功地将 QTextEdit 的内容复制到剪贴板,但我能够做到的唯一方法是下面的代码。
我不喜欢复制按钮为了复制内容而进行第二次调用。
有没有什么方法可以使用 get_button
按钮从第一个请求中存储值,并且可以使用复制按钮进行复制,而无需再次进行相同的调用?谢谢
from PyQt4 import QtCore, QtGui
import sys
class WorkerThread(QtCore.QThread):
get_String = QtCore.pyqtSignal(str)
def __init__(self):
super(WorkerThread, self).__init__()
def run(self):
self.get_String.emit('Some text.')
class GUI(QtGui.QWidget):
def __init__(self):
super(GUI, self).__init__()
self.get_Button = QtGui.QPushButton('Get')
self.c_Button = QtGui.QPushButton('Copy')
self.text_Box = QtGui.QTextEdit(self)
vbox = QtGui.QVBoxLayout(self)
vbox.addWidget(self.get_Button)
vbox.addWidget(self.c_Button)
vbox.addWidget(self.text_Box)
vbox.addStretch()
self.setGeometry(300, 300, 300, 300)
self.show()
self._thread = WorkerThread()
self.get_Button.clicked.connect(self.doIt)
self._thread.get_String.connect(self.text_Box.append)
self.c_Button.clicked.connect(self.copy_Stuff)
def copy_Stuff(self):
self.clipboard = QtGui.QApplication.clipboard()
self._thread.get_String.connect(self.clipboard.setText)
self._thread.start()
def doIt(self):
self.text_Box.clear()
self.text_Box.setText('')
self._thread.start()
def main():
app = QtGui.QApplication(sys.argv)
gui = GUI()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
事实证明这比我最初想象的要容易得多。我对如何正确复制文本感到困惑,因为我在其他示例和帖子中看到了各种不同的复制方式。在阅读了一段时间的文档并尝试更多地了解 pyqt 之后,我发现它就像使用这两行一样简单...
self.text_Box.selectAll()
self.text_Box.copy()
通过这两行和我的按钮,它似乎复制了 QTextEdit 小部件的所有内容,这是我真正需要的。这是我的最终工作代码,以防其他人发现它有用。
from PyQt4 import QtCore, QtGui
import sys
class WorkerThread(QtCore.QThread):
get_String = QtCore.pyqtSignal(str)
def __init__(self):
super(WorkerThread, self).__init__()
def run(self):
self.get_String.emit('Some text.')
class GUI(QtGui.QWidget):
def __init__(self):
super(GUI, self).__init__()
self.get_Button = QtGui.QPushButton('Get')
self.c_Button = QtGui.QPushButton('Copy')
self.text_Box = QtGui.QTextEdit(self)
vbox = QtGui.QVBoxLayout(self)
vbox.addWidget(self.get_Button)
vbox.addWidget(self.c_Button)
vbox.addWidget(self.text_Box)
vbox.addStretch()
self.setGeometry(300, 300, 300, 300)
self.show()
self._thread = WorkerThread()
self.get_Button.clicked.connect(self.doIt)
self._thread.get_String.connect(self.text_Box.append)
self.c_Button.clicked.connect(self.copy_Stuff)
def copy_Stuff(self):
self.text_Box.selectAll()
self.text_Box.copy()
def doIt(self):
self.text_Box.clear()
self.text_Box.setText('')
self._thread.start()
def main():
app = QtGui.QApplication(sys.argv)
gui = GUI()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
此代码示例显示了一个简单的工作线程,其信号为 returns 主值,在 QTextEdit 小部件中显示该值以及如何使用单个按钮复制 QTextEdit 小部件的所有内容点击