這裏是一個非常簡單的實現把按鈕一QLineEdit
作爲用戶類型,用Python寫的:
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
的內容Margin設置爲與空格相同的寬度(「
」)。現在這些按鈕不會與插入的文本重疊。
關於CSS兼容性:http://developer.qt.nokia.com/doc/qt-4.8/richtext-html-subset.html。您可以嘗試使用表格和一些CSS魔法來模擬所需的行爲,儘管它不會很容易,因爲richtext不支持任何輸入組件('刪除標記'按鈕?)。您應該提供更多有關所需行爲的信息,以獲得更準確的答案。每個單詞都應該被「標記」,還是隻有少量標籤的文字?被標記的單詞應該保持可編輯還是僅可移除?如果我有一段時間,我會嘗試創造一些你需要的東西。 –