PyQt5 – 如何制作可编辑的组合框

  • Post category:Python

下面是Python PyQt5中如何制作可编辑的组合框的完整使用攻略。

1. 简介

对于某些需要在下拉菜单中输入新项的应用程序,我们需要一个可编辑组合框来实现。PyQt5中提供了一个QComboBox类,可以创建一个下拉菜单。但是默认情况下,它不能用于输入新项。要使QComboBox可编辑,我们需要启用可编辑模式,并为其添加QLineEdit控件。

2. 实现步骤

2.1 创建一个可编辑组合框

combo_box = QComboBox(self)  # 创建一个QComboBox对象
combo_box.setEditable(True)  # 启用可编辑模式
line_edit = QLineEdit(self)  # 创建一个QLineEdit对象
combo_box.setLineEdit(line_edit)  # 将QLineEdit添加到QComboBox中

2.2 获取组合框中当前项和文本

index = combo_box.currentIndex()  # 获取当前项的索引
text = combo_box.currentText()  # 获取当前项的文本

2.3 添加新项到组合框中

combo_box.addItem("New item")  # 添加一个新项

2.4 在组合框中查找特定项

index = combo_box.findText("Item to find")  # 查找指定文本的项的索引
if index != -1:
    combo_box.setCurrentIndex(index)  # 将找到的项设置为当前项

3. 示例代码

以下是一个完整的示例,它演示了如何创建一个可编辑组合框,并添加、查找和删除项。

from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox, QLineEdit, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("Editable ComboBox")

        combo_box = QComboBox(self)
        combo_box.setEditable(True)
        line_edit = QLineEdit(self)
        combo_box.setLineEdit(line_edit)
        combo_box.addItem("Item 1")
        combo_box.addItem("Item 2")

        add_button = QPushButton("Add Item", self)
        add_button.move(20, 50)
        add_button.clicked.connect(lambda: combo_box.addItem(line_edit.text()))

        find_button = QPushButton("Find Item", self)
        find_button.move(110, 50)
        find_button.clicked.connect(lambda: self.find_item(combo_box, line_edit.text()))

        remove_button = QPushButton("Remove Item", self)
        remove_button.move(200, 50)
        remove_button.clicked.connect(lambda: combo_box.removeItem(combo_box.currentIndex()))

        self.setGeometry(200, 200, 300, 100)

    def find_item(self, combo_box, text):
        index = combo_box.findText(text)
        if index != -1:
            combo_box.setCurrentIndex(index)

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

在上面的示例中,我们创建了一个包含三个按钮的窗口。第一个按钮用于添加新项,第二个按钮用于查找项,第三个按钮用于删除当前项。我们还定义了一个find_item方法,用于查找指定的项,并将其设置为当前项。当我们单击查找按钮时,将调用此方法。

总结:制作可编辑的组合框可以通过三步完成:启用可编辑模式、添加QLineEdit对象、在组合框中添加/删除/查找项。在PyQt5中,我们可以使用QComboBox类和QLineEdit类轻松实现这一目标。