यहाँ एक उपयोगकर्ता प्रकार, पायथन में लिखा के रूप में एक QLineEdit
में बटन लगाने का एक बहुत ही सरल दिया गया है:
from PySide.QtCore import *
from PySide.QtGui import *
class Entry(QLineEdit):
def __init__(self):
QLineEdit.__init__(self)
self.buttons = []
self.backupText = ''
self.textEdited.connect(self.on_change)
self.layout = QHBoxLayout()
self.setLayout(self.layout)
self.layout.addStretch()
marginz = QLabel(' ')
marginz.show()
margin = marginz.width()
marginz.hide()
self.layout.setContentsMargins(margin, margin, margin, margin)
def on_change(self):
if self.text()[-1] == ' ' and not self.text().endswith(' '):
if len(self.text()) > len(self.backupText):
self.setText(self.text() + ' ')
self.buttons.append(QPushButton(self.text().split()[-1]))
self.layout.insertWidget(self.layout.count()-1, self.buttons[-1])
else:
self.setText(self.text()[0:-1])
self.buttons[-1].hide()
del self.buttons[-1]
self.backupText = self.text()
app = QApplication([])
window = QMainWindow()
window.setStyleSheet(
'QPushButton {border: 1px solid gray; background: lightgray; color: black;}')
entry = Entry()
window.setCentralWidget(entry)
window.show()
app.exec_()
यह एक QHBoxLayout
बनाता है और प्रत्येक शब्द आप लिखने के लिए यह करने के लिए एक बटन जोड़ता है, और ले जाता है जब आप शब्द से छुटकारा पा लेते हैं तो बटन दूर हो जाता है।
यदि आप प्रत्येक उप-विजेट के अंदर एक करीबी बटन डालना चाहते हैं, तो आप इसके लिए एक कस्टम विजेट भी बना सकते हैं।
संपादित
j_kubik की टिप्पणी के रूप में कहा गया है, व्यापक मार्जिन बटन के साथ सिस्टम टैग बटन पाठ उपयोगकर्ता द्वारा वर्तमान में लिख रहा है ओवरलैप का कारण होगा। मैंने डाले गए बटनों (स्टाइलशीट्स के साथ) के मार्जिन को लागू करने के लिए कोड को संशोधित किया है, उपयोगकर्ता द्वारा टाइप की जाने वाली प्रत्येक जगह के लिए एक अतिरिक्त स्थान जोड़ा है, और QHBoxLayout
की सामग्री सेट करें, मार्जिन एक स्थान के समान चौड़ाई ("
") सेट करें। अब बटन डाले गए पाठ को ओवरलैप नहीं करेंगे।
स्रोत
2011-12-24 00:57:42
सीएसएस-संगतता के बारे में: http://developer.qt.nokia.com/doc/qt-4.8/richtext-html-subset.html। आप टेबल और कुछ सीएसएस-जादू के साथ वांछित व्यवहार को अनुकरण करने का प्रयास कर सकते हैं, हालांकि यह आसान नहीं होगा क्योंकि Richtext किसी इनपुट घटक ('टैग हटाएं' बटन का समर्थन नहीं करता है?)। अधिक सटीक उत्तर प्राप्त करने के लिए आपको वांछित व्यवहार के बारे में अधिक जानकारी प्रदान करनी चाहिए। क्या हर शब्द "टैग" होना चाहिए या क्या इसमें कुछ टैग हैं? क्या टैग किए गए शब्दों को संपादन योग्य या केवल हटाने योग्य माना जाता है? अगर मेरे पास एक पल है तो मैं आपको कुछ बनाने की कोशिश करूंगा। –