Qt第四章:渲染列表-增强版 Myth丶恋晨 2024-03-26 16:41 16阅读 0赞 #### 一、工具类(直接COPY) #### # render_list_widget_util.py from PySide6.QtCore import Qt, QPoint from PySide6.QtGui import QAction, QIcon from PySide6.QtWidgets import QListWidget, QAbstractItemView, QListWidgetItem, QMenu, QWidget class ListWidgetDataDTO: """ 数据模型 """ def __init__(self, id: any, name: str, toolTip: str, statusTip: str): """ :param id: ID :param name: 名称 :param toolTip: 悬停提示 :param statusTip: 状态栏提示 """ self.id: any = id self.name: str = name self.toolTip: str = toolTip self.statusTip: str = statusTip def render_listWidget(listWidget: QListWidget, data: list[ListWidgetDataDTO]) -> QListWidget: """ 渲染列表 :param listWidget: 列表控件 :param data: 数据 :return: """ listWidget.clear() listWidget.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) # 开启自定义右键菜单 listWidget.customContextMenuRequested.connect(lambda point: __handle_contextMenuEvent__(listWidget, point)) # 右键菜单 listWidget.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) # 多选模式 listWidget.itemSelectionChanged.connect(lambda: print(len(listWidget.selectedItems()))) # 选中行为改变时触发时打印选中的对象 listWidget.setWrapping(True) # 自动换行、列 # listWidget.setFlow(QListView.LeftToRight) # 从左到右布局(默认从上到下布局) # 创建数据项 for d in data: item = QListWidgetItem() item.setText(d.name) item.setToolTip(d.toolTip) item.setStatusTip(d.statusTip) item.setData(Qt.UserRole + 1, d) # 显示复选框,【复选框的逻辑和列表是脱离的】 # 设置复选框状态(必须设置) # item.setFlags(item.flags() | Qt.ItemIsUserCheckable) # item.setCheckState(Qt.CheckState.Unchecked) listWidget.addItem(item) return listWidget def __handle_contextMenuEvent__(widget: QWidget, point: QPoint) -> None: """ 自定义右键菜单 :param widget: 载体 :param point: 相对载体坐标 :return: """ # 1.创建菜单对象 menu = QMenu() # 2.创建菜单列表 menu1 = QAction(QIcon("./1.png"), "保存") menu2 = QAction("退出") # 3.将菜单列表添加到菜单对象 menu.addAction(menu1) # 4.添加分隔线 menu.addSeparator() menu.addAction(menu2) # 5.给菜单添加事件 menu1.triggered.connect(lambda: (print("保存"), menu.close())) menu2.triggered.connect(lambda: quit()) # 6.显示菜单 event.globalPos()获取全局鼠标点击位置 menu.exec(widget.mapToGlobal(point)) #### 二、使用 #### from PySide6.QtUiTools import QUiLoader from service.database_service import get_tables from utils.render_list_widget_util import render_listWidget, ListWidgetDataDTO class HomeView: def __init__(self): # 加载UI文件 self.ui = QUiLoader().load('home.ui') render_listWidget(self.ui.listWidget, data=[ListWidgetDataDTO(id=None, name=table[0], toolTip=table[2], statusTip=table[2]) for table in get_tables(6)]) from PySide6.QtWidgets import QApplication from web.home import HomeView if __name__ == '__main__': app = QApplication([]) home_view = HomeView() home_view.ui.show() app.exec() ![f7763837b452447282912aab3fa681c4.png][] [f7763837b452447282912aab3fa681c4.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/26/6465da9d766c4c2eb83bbe552a97e054.png
还没有评论,来说两句吧...