功能:
1.文本框内增加关闭按钮实现清除文本框内容
2.可以取消#self.textChanged.connect(self.updateCloseButton) 该行备注实现有输入才显示关闭按钮
3.可使用self.dev_tree_search = LineEdit_close('搜索...') 的方式设置占位文本
4.可与QTreeWidget联动实现搜索tree,具体参考python pyqt5 QTreeWidget 实现模糊查找子项-优快云博客
效果图
代码
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
class LineEdit_close(QtWidgets.QLineEdit):
def __init__(self, placeholder_text, parent=None):
super(LineEdit_close, self).__init__(parent)
self.setPlaceholderText(placeholder_text)
self.clearButton = QtWidgets.QToolButton(self)
self.clearButton.setIcon(QtGui.QIcon("images//close.png"))
self.clearButton.setCursor(QtCore.Qt.ArrowCursor)
self.clearButton.setStyleSheet("QToolButton { border: none; padding: 0; }")
self.clearButton.setGeometry(self.rect().adjusted(self.width() - 20, 0, 0, 0))
self.clearButton.clicked.connect(self.clear)
self.clearButton.setVisible(True)
#self.textChanged.connect(self.updateCloseButton)
def updateCloseButton(self, text):
if text:
self.clearButton.setVisible(True)
else:
self.clearButton.setVisible(False)
def resizeEvent(self, event):
super().resizeEvent(event)
button_size = self.clearButton.sizeHint()
frame_width = self.style().pixelMetric(QtWidgets.QStyle.PM_DefaultFrameWidth)
self.clearButton.setGeometry(
self.rect().adjusted(self.width() - button_size.width() - frame_width, 0, -frame_width, 0))
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.treeWidget = QtWidgets.QTreeWidget()
self.setCentralWidget(self.treeWidget)
self.toolbar = self.addToolBar("Search")
search_box = LineEdit_close('搜索...')
self.toolbar.addWidget(search_box)
self.treeWidget.setHeaderLabels(["Name", "Age"])
for i in range(5):
item = QtWidgets.QTreeWidgetItem(["Item {}".format(i), str(i)])
self.treeWidget.addTopLevelItem(item)
for j in range(3):
child_item = QtWidgets.QTreeWidgetItem(["Child item {}".format(j), str(j)])
item.addChild(child_item)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())