PyQt5 QListWidget – 获得当前项改变信号

  • Post category:Python

使用 PyQt5 中的 QListWidget 控件时,获得当前项改变的信号可以通过 currentItemChanged() 信号来实现。

该信号的槽函数为两个参数,第一个参数是当前项的 QListItem,在这个函数中,可以通过 text() 或者 data() 方法,获取到当前项的文本或者数据内容。

以下是一个简单的示例,展示如何通过 currentItemChanged() 信号获取当前项的文本内容:

from PyQt5.QtWidgets import QApplication, QListWidget, QMessageBox
from PyQt5.QtCore import Qt

app = QApplication([])
list_widget = QListWidget()

def handle_change(current_item, previous_item):
    item_text = current_item.text()
    QMessageBox.information(None, 'Current item', f'Current item is {item_text}')

list_widget.currentItemChanged.connect(handle_change)

list_widget.addItem("Item 1")
list_widget.addItem("Item 2")
list_widget.addItem("Item 3")

list_widget.show()
app.exec_()

在上面的示例中,我们创建了一个 QListWidget 控件,并添加了三个项。当当前项改变时,handle_change() 函数会被调用,从而弹出一个 QMessageBox 显示当前项的文本内容。

除了获取当前项的文本内容外,我们还可以通过 data() 方法来获取当前项的数据内容。以下是一个示例,展示如何通过 currentItemChanged() 信号获取当前项的数据内容:

from PyQt5.QtWidgets import QApplication, QListWidget, QMessageBox
from PyQt5.QtCore import Qt

app = QApplication([])
list_widget = QListWidget()

def handle_change(current_item, previous_item):
    item_data = current_item.data(Qt.UserRole)
    QMessageBox.information(None, 'Current item', f'Current item data is {item_data}')

list_widget.currentItemChanged.connect(handle_change)

list_widget.addItem("Item 1").setData(Qt.UserRole, 1)
list_widget.addItem("Item 2").setData(Qt.UserRole, 2)
list_widget.addItem("Item 3").setData(Qt.UserRole, 3)

list_widget.show()
app.exec_()

在上面的示例中,我们使用 setData() 方法为每个项设置了一个数据内容,然后通过 currentItemChanged() 信号获取当前项的数据内容,并在 QMessageBox 中展示。