2010-01-05 17 views
6

मेरे पास एक साधारण PyQt4 एप्लिकेशन है (नीचे दिया गया कोड देखें) जो अगली समस्या का खुलासा करता है: यदि मैं QLineEdit से टेक्स्ट का चयन करता हूं और इसे क्लिपबोर्ड पर कॉपी करता हूं तो मैं इसे केवल दूसरे एप्लिकेशन पर पेस्ट कर सकता हूं जबकि मेरा एप्लिकेशन चल रहा है। ऐसा लगता है कि बाहर निकलने पर PyQt एप्लिकेशन क्लिपबोर्ड को साफ़ करता है ताकि एप्लिकेशन बंद होने के बाद मैं टेक्स्ट पेस्ट नहीं कर सकता।मैं PyQt4 एप्लिकेशन से बाहर निकलने पर क्लिपबोर्ड को साफ़ कैसे कर सकता हूं?

इस समस्या से बचने के लिए मैं क्या कर सकता हूं?

पीईक्यूटी 4.4.3 @ पायथन 2.5 @ विंडोज एक्सपी। इसके अलावा यह प्रभाव PyQt 4.5+, और लिनक्स पर भी पुष्टि हुई।

import sys 
from PyQt4 import QtGui 
app = QtGui.QApplication(sys.argv) 
edit = QtGui.QLineEdit() 
edit.setText('foo bar') 
edit.show() 
app.exec_() 
+0

प्राथमिक और माध्यमिक चयन X पर बाहर निकलने के लिए चुने गए कार्यक्रमों के बाद जीवित नहीं रहते हैं। – jfs

उत्तर

5

ठीक है, क्लिपबोर्ड का बिल्कुल स्पष्ट नहीं है। बस क्यूटी सिर्फ टेक्स्ट के बजाय क्लिपबोर्ड में पाठ के कुछ प्रकार के सूचक को स्टोर करता है। गॉर्डन टायलर ने मुझे इस चर्चा के लिए इंगित किया है: http://old.nabble.com/Re:-Searching-for-a-very-small-scprit-using-CLIPBOARD-p23246491.html जो बताता है कि क्या हो रहा है। मैं स्पष्टीकरण के कोड और प्रासंगिक भाग उद्धृत करता हूं।

रन (closeEvent हैंडलर में उदाहरण के लिए) आवेदन के बाहर निकलने पर इस कोड:

from PyQt4 import QtGui, QtCore 
    clipboard = QtGui.QApplication.clipboard() 
    event = QtCore.QEvent(QtCore.QEvent.Clipboard) 
    QtGui.QApplication.sendEvent(clipboard, event) 

इसके पीछे मूल अवधारणा है कि डिफ़ॉल्ट नकल कुछ क्लिपबोर्ड में से केवल प्रतियां एक संदर्भ/सूचक को स्रोत आवेदन। फिर जब कोई अन्य एप्लिकेशन क्लिपबोर्ड से डेटा पेस्ट करना चाहता है तो यह स्रोत एप्लिकेशन से डेटा का अनुरोध करता है। कॉलिंग OleFlushClipboard कॉलिंग के संदर्भ में क्लिपबोर्ड में वास्तविक डेटा को कॉपी करने का कारण बनता है। हालांकि यह छवियों की प्रतिलिपि करते समय देरी का कारण बनता है, लेकिन स्ट्रिंग के साथ पर इसका कोई ध्यान देने योग्य प्रभाव नहीं होना चाहिए।

उपरोक्त कोड सुंदर क्रॉस-प्लेटफ़ॉर्म है और लिनक्स प्लेटफ़ॉर्म पर कोई बुरा प्रभाव नहीं डालता है।

1

जब मैं जीएनयू/लिनक्स के तहत इसी तरह के मुद्दे में भाग गया और इस सवाल को बाईलिक्स द्वारा संदर्भित साइट पर उत्तर मिला (जिसका पता बदल गया है, लेकिन फिर भी वेब खोज के माध्यम से पहुंचा जा सकता है)। सबसे अधिक प्रासंगिक भाग का हवाला देते हैं करने के लिए:

, जब एप्लिकेशन क्लिपबोर्ड रास्ते की स्थापना याद रखें कि लिनक्स में, जब तक आप Klipper की तरह कुछ है, क्लिपबोर्ड खाली।

तो ऐसा ही है। यह जीएनयू/लिनक्स के लिए एक सिस्टम चीज है। यहां ubuntu wiki:

ऐसा क्यों होता है?

समस्या तब होती है क्योंकि Xorg प्रतिलिपि बनाने के लिए एक रूढ़िवादी दृष्टिकोण लेता है। जब उपयोगकर्ता चयन या प्रतिलिपि करता है तो यह केवल मूल डेटा का संदर्भ देता है। जब तक उपयोगकर्ता पेस्ट का अनुरोध नहीं करता तब तक यह स्रोत प्रोग्राम से वास्तविक डेटा नहीं जाता है और पुनर्प्राप्त नहीं करता है। यह इस तरह से डेटा के बहुत सारे अनियंत्रित स्थानांतरण को बचाता है, जिसने बंद क्लिप से डेटा पुनर्प्राप्त करने का कोई तरीका नहीं है, जिसने कहीं और क्लिपबोर्ड नहीं बचाया है।

आप क्लिपबोर्ड प्रबंधक, क्लिपर, ग्लिपर या क्लिपमैन जैसे क्लिपबोर्ड प्रबंधक स्थापित करके इसे प्राप्त कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे