2012-01-24 23 views
5

समस्या: मैं अतिरिक्त टैग के साथ पाठ के लिए एक टेक्स्ट संपादन विजेट को कार्यान्वित करना चाहता हूं। मैं कुछ मामलों में कुछ टैग अदृश्य होना चाहता हूं ताकि वे उपयोगकर्ता को विचलित न करें।QSyntaxHighlighter के साथ छिपाने वाला पाठ

पर्यावरण: मैं PyQt उपयोग कर रहा हूँ और QPlainTextWidget और QSyntaxHighlighter उपयोग करने के लिए पसंद करते हैं।

दृष्टिकोण:QSyntaxHighlighter के साथ मैं तार जो मेरी आवश्यकता से मेल के लिए QTextCharFormat सेट कर सकते हैं। QTextCharFormat ने मुझे आकार, रंग इत्यादि जैसे सभी फ़ॉन्ट गुण दिए हैं लेकिन: मुझे टेक्स्ट को छिपाने या शून्य आकार को कम करने का विकल्प नहीं मिला है।

मैं टैग को हटाना या प्रतिस्थापित नहीं करना चाहता, क्योंकि यह बहुत अधिक कोड पेश करेगा (प्रतिलिपि में टैग होना चाहिए और बिना टैग के अनुसार शेष पाठ बनाने के लिए मैं QSyntaxHighlighter का उपयोग नहीं कर सकता)।

अद्यतन: अब तक मुझे एक बदसूरत हैक मिला है। QTextFormat :: FontLetterSpacing को एक छोटे से मूल्य पर सेट करके, पाठ कम और कम जगह का उपभोग करेगा। एक पारदर्शी रंग के संयोजन में पाठ अदृश्य की तरह कुछ है।

समस्या: मेरे परीक्षण में यह केवल अक्षर स्पैसिंग के लिए 0.016% तक काम करता था। रिक्ति के नीचे 100% पर रीसेट कर दिया गया है।

+0

ठीक है, सादा पाठ सादा पाठ है। गैर-सादे विजेट का उपयोग करने का प्रयास करें। –

+0

मुझे 'QTextEdit' में संबंधित विकल्प नहीं मिला है। AFAIK अंतर स्क्रॉलिंग व्यवहार, टेबल, फ्रेम और छवियों जैसी चीजों तक ही सीमित है। पाठ जो छिपाने में सक्षम हो सकते हैं वे 'QPlainTextEdit' के समान हैं। अन्य तो क्यूटी के अंदर मो अधिक उन्नत कक्षाएं हैं। क्यूएससिंटिला का मतलब कुछ पूरी तरह से अलग करना होगा। – m2j

उत्तर

3

आप इसके लिए अंतर्निहित QTextDocument का उपयोग कर सकते हैं। इसमें setVisible का उपयोग करके ब्लॉक की दृश्यता को चालू और बंद किया जा सकता है। टेक्स्ट और नए ब्लॉक डालने और दृश्यता स्विच करने के लिए QTextCursor का उपयोग करें। बोनस के रूप में कॉपी फ़ंक्शन किसी भी तरह से दृश्यमान ब्लॉक की सामग्री की प्रतिलिपि बनाता है।

नोट्स: अधिक जानकारी के लिए QTextCursor के documentation देखें। another question में यहां बताया गया है कि दृश्यता सेट करना QTextEdits पर काम नहीं कर रहा है।

उदाहरण:

from PyQt5 import QtWidgets, QtGui 

app = QtWidgets.QApplication([]) 

w = QtWidgets.QPlainTextEdit() 
w.show() 

t = QtGui.QTextCursor(w.document()) 
t.insertText('plain text') 
t.insertBlock() 
t.insertText('tags, tags, tags') 
t.block().setVisible(False) 

print(w.document().toPlainText()) 

app.exec_()