PyQt5 QListWidget – 当前选定行的改变信号

  • Post category:Python

当我们需要使用一个列表来展示一系列条目时,可以使用 PyQt5 的 QListWidget。在这个控件中,默认情况下,用户可以通过鼠标选择其中的一行,并且这个当前选中的行可以通过 Qt 中的信号和槽机制来获取到。

其中,当前选定行的改变信号的使用需要和 QListWidget 的 currentItemChanged() 信号结合使用。currentItemChanged() 信号在当前选定项发生变化时被触发,并且提供一个选定项的参数。在使用 currentItemChanged() 信号时可以指定一个当前行的变化函数,这个函数在行变化时会被调用。

下面我们来演示一个具体的实例:

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QWidget, QVBoxLayout

class ListWidgetDemo(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.list_widget = QListWidget()
        self.list_widget.addItem("Item 1")
        self.list_widget.addItem("Item 2")
        self.list_widget.addItem("Item 3")
        self.list_widget.currentItemChanged.connect(self.show_selected_item)
        layout = QVBoxLayout(self)
        layout.addWidget(self.list_widget)

    def show_selected_item(self, current_item, previous_item):
        if current_item is not None:
            print("Current item text: ", current_item.text())
            print("Previous item text: ", previous_item.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = ListWidgetDemo()
    demo.show()
    sys.exit(app.exec_())

在这个例子中,我们创建了一个 QListWidget,并添加了三个条目。接着,我们通过 currentItemChanged() 信号将 show_selected_item() 函数连接到 QListWidget 上。当当前选中的行改变时,show_selected_item() 函数会被调用。在 show_selected_item() 函数中,我们输出了当前选中的项目和前一个选中的项目的内容。

再来一个演示改变选项时改变其他部分的UI的例子:

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QWidget, QVBoxLayout, QLabel

class ListWidgetDemo(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.list_widget = QListWidget()
        self.list_widget.addItem("Item 1")
        self.list_widget.addItem("Item 2")
        self.list_widget.addItem("Item 3")
        self.list_widget.currentItemChanged.connect(self.show_selected_item)
        self.label = QLabel("No item selected")
        layout = QVBoxLayout(self)
        layout.addWidget(self.list_widget)
        layout.addWidget(self.label)

    def show_selected_item(self, current_item, previous_item):
        if current_item is not None:
            self.label.setText(current_item.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = ListWidgetDemo()
    demo.show()
    sys.exit(app.exec_())

这个例子中,我们创建了一个 QListWidget,并添加了三个条目。接着,我们通过 currentItemChanged() 信号将 show_selected_item() 函数连接到 QListWidget 上。当当前选中的行改变时,show_selected_item() 函数会被调用。在 show_selected_item() 函数中,我们设置了一个 QLabel 并将其文本设置为当前选中项的文本。这样,选项改变时,将会同时改变 label 中的文本。

总的来说,使用 PyQt5 的 QListWidget 和 currentItemChanged() 信号是非常方便的。在演示的例子中,我们可以通过 show_selected_item() 函数获取当前选中的行,并执行一些自定义操作。如果你需要在你的 PyQt5 程序中使用列表、树或表格,QListWidget、QTreeWidget 和 QTableWidget 等控件都可以帮助你实现这个目标。