2016-12-03 16 views
1

Я пытаюсь сохранить изображение в буфер обмена, так что я написал код так:Копирование изображения в буфер обмена не работает на Linux

#!/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, ubuntu 16.10, если помогает).

ответ

1

К сожалению, для вас это нормальное поведение в Linux. По умолчанию данные буфера обмена не сохраняются, когда приложение закрывается. Обычным обходом этой проблемы является установка менеджера буфера обмена. Для Ubuntu, обратитесь к этой вики статью для более подробной информации:

(NB: На самом деле я не проверял любой из предложенных решений себя, поэтому я ли какой-то не знаю, из них будут работать с PyQt).

Основная проблема заключается в том, что в Linux буфер обмена хранит только ссылку на базовые данные. Это очень эффективно с точки зрения хранения, поскольку данные копируются только тогда, когда клиентская программа действительно запрашивает его. Но, конечно, если приложение-источник закрывается, ссылка будет недействительной, и буфер обмена станет пустым.