QLineEdit下利用QListWidget显示类似菜单功能
时间: 2023-05-16 15:05:55 浏览: 52
可以使用 QListWidget 的 addItem() 方法添加菜单项,然后在 QLineEdit 的 textChanged() 信号中根据用户输入的内容过滤出匹配的菜单项并显示在 QListWidget 中。具体实现可以参考以下代码:
```python
from PyQt5.QtWidgets import QApplication, QLineEdit, QListWidget, QVBoxLayout, QWidget
class MenuWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.menu = QListWidget()
self.menu.addItem('apple')
self.menu.addItem('banana')
self.menu.addItem('cherry')
self.menu.addItem('durian')
self.menu.addItem('elderberry')
self.menu.addItem('fig')
self.menu.addItem('grape')
self.menu.addItem('honeydew')
self.menu.addItem('kiwi')
self.menu.addItem('lemon')
self.menu.addItem('mango')
self.menu.addItem('nectarine')
self.menu.addItem('orange')
self.menu.addItem('pear')
self.menu.addItem('quince')
self.menu.addItem('raspberry')
self.menu.addItem('strawberry')
self.menu.addItem('tangerine')
self.menu.addItem('watermelon')
layout = QVBoxLayout()
layout.addWidget(self.menu)
self.setLayout(layout)
class MainWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.line_edit = QLineEdit()
self.menu_widget = MenuWidget()
self.line_edit.textChanged.connect(self.filter_menu)
layout = QVBoxLayout()
layout.addWidget(self.line_edit)
layout.addWidget(self.menu_widget)
self.setLayout(layout)
def filter_menu(self, text):
self.menu_widget.menu.clear()
for item_text in self.menu_widget.menu.findItems(text, Qt.MatchContains):
self.menu_widget.menu.addItem(item_text.text())
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
这个例子中,我们创建了一个 MenuWidget 类,它包含一个 QListWidget,用于显示菜单项。然后我们创建了一个 MainWindow 类,它包含一个 QLineEdit 和一个 MenuWidget。在 MainWindow 的构造函数中,我们将 QLineEdit 的 textChanged 信号连接到 filter_menu() 方法,该方法会根据用户输入的内容过滤出匹配的菜单项并显示在 QListWidget 中。