一、列表视图
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QListWidget,
QListWidgetItem, QMenu, QInputDialog)
from PyQt5.QtCore import Qt
class CustomWidget(QWidget):
def __init__(self, parent=None):
super(CustomWidget, self).__init__(parent)
self.layout = QVBoxLayout(self)
self.listWidget = QListWidget(self)
self.layout.addWidget(self.listWidget)
self.setLayout(self.layout)
# 为示例添加一些项目
for i in range(10):
item = QListWidgetItem(f"Item {i}")
self.listWidget.addItem(item)
# 常用的`QListWidget`连接:
1. `itemClicked`:当用户单击列表项时触发的信号。
list_widget.itemClicked.connect(item_clicked_handler)
2. `itemDoubleClicked`:当用户双击列表项时触发的信号。
list_widget.itemDoubleClicked.connect(item_double_clicked_handler)
3. `currentItemChanged`:当当前选中的列表项发生变化时触发的信号。
list_widget.currentItemChanged.connect(current_item_changed_handler)
4. `itemSelectionChanged`:当列表项的选择状态发生变化时触发的信号。
list_widget.itemSelectionChanged.connect(item_selection_changed_handler)
5. `itemActivated`:当用户激活(例如按下回车键)列表项时触发的信号。
list_widget.itemActivated.connect(item_activated_handler)
6. `itemEntered`:当鼠标进入列表项时触发的信号。
list_widget.itemEntered.connect(item_entered_handler)
以上是一些常用的`QListWidget`连接,你可以根据需要选择适合的连接,并编写对应的处理函数来处理相关事件。
self.listWidget.itemClicked.connect(self.handleItemClicked)
self.listWidget.setContextMenuPolicy(Qt.CustomContextMenu)
self.listWidget.customContextMenuRequested.connect(self.showContextMenu)
def showContextMenu(self, position):
item = self.listWidget.itemAt(position)
if item:
menu = QMenu(self.listWidget)
# 添加删除操作
delete_action = menu.addAction("Delete")
delete_action.triggered.connect(lambda: self.listWidget.takeItem(self.listWidget.row(item)))
# 添加修改操作
modify_action = menu.addAction("Modify")
modify_action.triggered.connect(lambda: self.modifyItem(item))
# 显示上下文菜单
menu.exec_(self.listWidget.mapToGlobal(position))
def modifyItem(self, item):
# 弹出一个对话框以获得新的文本
text, ok = QInputDialog.getText(self, 'Modify item', 'Enter new text:',
text=item.text())
if ok:
item.setText(text)
def handleItemClicked(self, item):
print(f"You clicked on: {item.text()}")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = CustomWidget()
window.show()
sys.exit(app.exec_())
二、复选框
import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem
from PyQt5.QtCore import Qt
class CustomListWidget(QListWidget):
def __init__(self, parent=None):
super(CustomListWidget, self).__init__(parent)
# 连接 itemChanged 信号到槽函数
self.itemChanged.connect(self.handleItemChanged)
# 为示例添加一些项目
for i in range(10):
label_name = f"Item {i}"
item = QListWidgetItem(label_name)
# Qt.Checked 2 组件没有被选中(默认)
# Qt.PartiallyChecked 1 组件被半选中
# Qt.Unchecked 0 组件被选中
item.setCheckState(Qt.Unchecked) # 设置为未选中状态
self.addItem(item)
def handleItemChanged(self, item):
# 检查复选框状态并执行相应的功能
if item.checkState() == Qt.Checked:
print(f"Item '{item.text()}' was checked.")
# 你可以在这里添加其他功能
elif item.checkState() == Qt.Unchecked:
print(f"Item '{item.text()}' was unchecked.")
# 你也可以在这里添加其他功能
if __name__ == '__main__':
app = QApplication(sys.argv)
window = CustomListWidget()
window.show()
sys.exit(app.exec_())