PyQt5组合框 用户输入的项目存储在顶部

  • Post category:Python

PyQt5是Python语言中的一个GUI工具包,可以用来创建各种类型的GUI程序。在PyQt5中,组合框(QComboBox)是一种常用的用户界面控件,它可以让用户从设定的一组项目中进行选择。本篇攻略将详细讲解如何使用PyQt5组合框,并且将输入的项目保存在顶部。

  1. 导入PyQt5库

在Python程序中使用PyQt5库,需要先导入PyQt5库,如下所示:

from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox
import sys
  1. 创建应用程序和主窗口

创建应用程序和主窗口之前,需要先定义保存项目的列表。在这个列表中,我们将使用insert()方法将新的项目添加到顶部。

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

        self.items = ["Item 1", "Item 2", "Item 3", "Item 4"]

        self.init_ui()

    def init_ui(self):
        # 创建组合框
        combo_box = QComboBox(self)

        # 将初始项目添加到组合框中
        combo_box.addItems(self.items)

        # 将组合框添加到主窗口中
        self.setCentralWidget(combo_box)

        # 显示主窗口
        self.show()

app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())

在上述代码中,使用addItems()方法将初始项目添加到组合框中,并将组合框添加到主窗口中。当用户输入新的项目时,这些项目将会被添加到顶部。

  1. 添加“新增项目”功能

要使用组合框保存用户输入的项目,需要为组合框添加能够输入新项目的功能。通过QLineEdit的构造方法,设置组合框允许编辑。必须为组合框注册signal,以便在鼠标移开时或按下Enter键时保存项目。使用insert()方法将新的项目添加到保存项目的列表中的顶部。

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

        self.items = ["Item 1", "Item 2", "Item 3", "Item 4"]

        self.init_ui()

    def init_ui(self):
        # 创建组合框
        combo_box = QComboBox(self)

        # 将初始项目添加到组合框中
        combo_box.addItems(self.items)

        # 设置组合框可编辑
        combo_box.setEditable(True)

        # 显示下拉框
        combo_box.lineEdit().returnPressed.connect(self.add_item)

        # 将组合框添加到主窗口中
        self.setCentralWidget(combo_box)

        # 显示主窗口
        self.show()

    def add_item(self):
        # 从组合框中获取当前输入的项目
        new_item = self.centralWidget().currentText()

        # 将新项目插入到保存项目的列表中
        self.items.insert(0, new_item)

        # 同步更新组合框中的项目
        self.centralWidget().clear()
        self.centralWidget().addItems(self.items)

app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())

在这个示例中,我们为组合框启用了编辑功能,并使用lineEdit()方法获取文本输入框。在输入框中按下Enter或者移开鼠标后,将触发add_item()方法,在这个方法中,我们将从组合框中获取新的项目,并将它插入到保存项目的列表的顶部。然后,我们使用清除combo_box()中的方法,并再次添加项目,以便在这个组合框中显示新的项目。

  1. 多级联动菜单

在这个示例中,我们将建立一个组合框,其中有两个级别的联动菜单。当用户选择第一个下拉菜单的选项时,将显示第二个下拉菜单。当用户选择第二个下拉菜单的选项时,将触发信号并显示结果。

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

        self.init_ui()

    def init_ui(self):
        # 创建第一个下拉菜单
        combo_box1 = QComboBox(self)
        combo_box1.addItem("Fruits / Watermelon selection")

        # 添加水果项目
        fruits = ["Apple", "Banana", "Cherry"]
        combo_box1.addItem("Fruits selection")
        combo_box1.addItems(fruits)

        # 添加西瓜项目
        watermelon = ["Crimson Sweet", "Black Diamond", "Sugar Baby"]
        combo_box1.addItem("Watermelon selection")
        combo_box1.addItems(watermelon)

        # 创建第二个下拉菜单
        combo_box2 = QComboBox(self)
        combo_box2.move(200, 50)

        # 隐藏第二个下拉菜单
        combo_box2.hide()

        # 连接两个下拉框
        combo_box1.activated[str].connect(self.show_combobox2)

        # 显示下拉框1
        self.setCentralWidget(combo_box1)

        # 显示主窗口
        self.show()

    def show_combobox2(self, text):
        # 获取第二个下拉框
        combo_box2 = self.centralWidget().parent().findChild(QComboBox, "combobox2")

        # 添加项目到第二个下拉框
        combo_box2.clear()
        if text == "Fruits selection":
            combo_box2.addItems(["Apple", "Banana", "Cherry"])
        elif text == "Watermelon selection":
            combo_box2.addItems(["Crimson Sweet", "Black Diamond", "Sugar Baby"])

        # 显示第二个下拉框
        combo_box2.show()

app = QApplication(sys.argv)
window = MainWindow()
window.setGeometry(500, 500, 400, 100)
sys.exit(app.exec_())

在这个示例中,我们创建了两个组合框,一个组合框中包含“水果选择”和“西瓜选择”,另一个组合框中包含相应的水果和西瓜选项。当用户从第一个下拉菜单选择“Fruits selection”或“Watermelon selection”时,将出现第二个下拉菜单,并显示相应的选项。通过调用findChild()方法获取第二个下拉框,并使用addItems()方法向下拉框中添加选项。当用户从第二个下拉框中选择一个选项时,将执行show_result()方法。

综上所述,我们学习了如何使用PyQt5中的组合框,以及如何保存用户输入的项目到顶部,同时还演示了如何创建一个级联菜单。这些示例涵盖了组合框的基础和高级使用方法,可以帮助你更好地了解PyQt5 GUI编程。