2016-12-03 1 views
1

나는 시스템 클립 보드에 이미지를 저장하기 위해 노력하고있어 작동하지 않습니다 시스템 클립 보드에 이미지를 복사, 그래서 나는이 같은 일부 코드 작성 : 슬프게도리눅스

#!/usr/bin/python3 

from PyQt5.Qt import QApplication 
from PyQt5.QtWidgets import QWidget, QPushButton 
from PyQt5.Qt import QImage 

import sys 

class MyWidget(QWidget): 
    def __init__(self): 
     super(MyWidget, self).__init__() 
     self.button = QPushButton(self) 
     self.button.clicked.connect(self.copyPicToClip) 

    def copyPicToClip(self): 
     image = QImage('./test.jpg') 
     QApplication.clipboard().setImage(image) 
     self.close() 

if __name__ == '__main__': 
    a = QApplication(sys.argv) 

    myW = MyWidget() 
    myW.show() 

    a.exec() 

을, 나는 그것이 '아무튼 발견 전혀 일하지 않는다. 그런 다음 해결책을 찾으려고 노력했습니다. 내가 시도한 첫 번째 일은 다음과 같았습니다.

def copyPicToClip(self): 
    image = QImage('./test.jpg') 
    QApplication.clipboard().setImage(image) 
    # self.close() 

이 후 나는 방금 작업 한 것으로 판명했지만 창이 자동으로 닫히지 않습니다.

그럼 복사 텍스트로 시도 :

#!/usr/bin/python3 

from PyQt5.Qt import QApplication, QClipboard 
from PyQt5.QtWidgets import QWidget, QPushButton 
from PyQt5.Qt import QImage 

import sys 

class MyWidget(QWidget): 
    def __init__(self): 
     super(MyWidget, self).__init__() 
     self.button = QPushButton(self) 
     self.button.clicked.connect(self.copyPicToClip) 
     QApplication.clipboard().dataChanged.connect(self.testFunc) 

    def copyPicToClip(self): 
     image = QImage('./test.jpg') 
     QApplication.clipboard().setImage(image) 

    def testFunc(self): 
     print('Here') 
     self.close() 

if __name__ == '__main__': 
    a = QApplication(sys.argv) 

    myW = MyWidget() 
    myW.show() 

    a.exec() 

슬프게도, 다시 실패했습니다.

이렇게하면 응용 프로그램을 일찍 닫으면 이미지가 클립 보드에 저장되지 않습니다. 하지만 클립 보드에 이미지를 복사 한 후 닫고 싶습니다.

제안 사항?

(PyQt5, 우분투 16.10, 도움이된다면).

답변

1

불행히도 귀하께서는 Linux에서 "정상적인"동작입니다. 기본적으로 응용 프로그램이 닫힐 때 클립 보드 데이터는 유지되지 않습니다. 이 문제의 일반적인 해결 방법은 클립 보드 관리자를 설치하는 것입니다.

  • 우분투 위키 : 우분투를 들어, 자세한 내용은이 위키 문서를 참조 Clipboard Persistence

(NB : 사실은 제안 된 솔루션을 자신의 테스트하지 않았습니다, 그래서 나는 어떤 여부를 알 수없는 그들 중 PyQt와 함께 작동합니다).

기본 문제는 Linux에서 클립 보드는 기본 데이터에 대한 참조 만 저장한다는 것입니다. 이는 클라이언트 프로그램이 실제로 요청할 때만 데이터가 복사되기 때문에 저장 영역 측면에서 매우 효율적입니다. 물론 원본 응용 프로그램이 닫히면 참조가 무효화되고 클립 보드가 비게됩니다.