2017-12-01 9 views
0

QTextEditウィジェット内の他のスレッドからテキスト値をコピーできる、クリップボードへの適切なコピーを作成する方法を解明しようとしています。
QTextEditウィジェットで値をプルしてQTextEditウィジェットに表示し、ボタンでQTextEditの内容をクリップボードにコピーしようとしましたが、私のコードは以下のとおりです。
私が気に入らないのは、コピーボタンがコンテンツをコピーするために2回目の呼び出しを行うことです。
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() 

答えて

0

これは私が最初に考えたよりもはるかに簡単だったことがわかりました。テキストを正しくコピーする方法と混乱しました。なぜなら、私が他の例や投稿で行ったように見えるさまざまな方法のためです。しばらくしてPyQtはについてもう少し学ぶしようとしているため、ドキュメントを読んだ後、私はすべてのコピーのようです...それらの2本のラインと私のボタンで

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

これらの2行を使用したのと同じくらい簡単だったことがわかります本当に必要な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() 

このコード例では、主に値を返し信号と単純な作業スレッドを示すQTextEditウィジェットの値とどのように単一のボタンのクリックでQTextEditウィジェットのすべての内容をコピーすることを表示します。

関連する問題