尝试使用按钮从其他线程复制文本

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 小部件的所有内容点击