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

2024-05-03 15:40:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试找到一种方法来制作一个不错的“复制到剪贴板”按钮函数,在这个函数中,我可以从QTextEdit小部件中的其他线程复制文本值。
我从其他线程中提取值,并将它们显示在QTextEdit小部件中,我一直试图用一个按钮成功地将QTextEdit的内容复制到剪贴板上,但我能做到的唯一方法是下面的代码。
不要按第二个按钮来复制内容。br' 有没有某种方法可以使用get_button按钮存储第一个请求中的值,并且可以使用copy按钮进行复制,而不必再次进行相同的调用?谢谢。在

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()

Tags: 方法textselfboxgetstringinitdef
1条回答
网友
1楼 · 发布于 2024-05-03 15:40:44

结果发现这比我最初想象的要容易得多。我对如何正确地复制文本感到困惑,因为我在其他示例和帖子中看到了不同的复制方式。在阅读了一段时间的文档并试图了解更多关于pyqt的知识后,我发现使用这两行代码很简单。。。在

    self.text_Box.selectAll()
    self.text_Box.copy()

有了这两行和我的按钮,它似乎复制了QTextEdit小部件的所有内容,这正是我真正需要的。这是我最后的工作代码,以防其他人发现它有用。在

^{pr2}$

这个代码示例显示了一个简单的工作线程,该线程使用signal向main返回一个值,在qtexted小部件中显示该值,以及如何通过单击一个按钮来复制QTextEdit小部件的所有内容。在

相关问题 更多 >