Python+PySide6进行GUI设计批量删除listWidget多个项目

PySide6的listWidget控件的selected 与checked状态不能混淆,是两个不同概念。

下面两个方法实现,一次批量删除listWidget控件中的多个项目,对第一个方面的理解:

这句代码:items = self.list_widget.findItems("", QtCore.Qt.MatchContains) 是使用 QListWidget 的 findItems() 方法来查找符合特定条件的项目。

具体来说,findItems() 方法用于在 QListWidget 中搜索包含特定文本的项目。这个方法接受两个参数:

  1. 第一个参数是要搜索的字符串。
  2. 第二个参数是匹配模式,定义了如何进行搜索。

在这句代码中,第一个参数是一个空字符串 "",这意味着它将匹配所有项目,因为所有项目都可以包含空字符串。

第二个参数是 QtCore.Qt.MatchContains,这是一个标志,表示在搜索时只要项目文本包含第一个参数指定的字符串,就认为该项目符合条件。

因此,这句代码的作用是查找 list_widget 中的所有项目,无论它们的内容如何,因为每个项目都可以包含空字符串。然后,这些项目被保存在 items 列表中。

然而,这种搜索方式实际上不是获取所有项目的最佳方法,因为它基于文本匹配而非直接获取所有项目。更直接的方式是使用 count() 和 item(index) 方法来遍历所有项目,如之前所提到的。这样可以避免潜在的混淆和误解。

第二个逻辑更清晰,需要注意从后向前遍历,把符合条件的进行删除。因为每次删除,listWidget控件就会更新一遍所有项目的索引。

完整代码:

import sys
from PySide6 import QtWidgets, QtCore, QtGui


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

        self.setWindowTitle("批量删除选中项目")
        self.setGeometry(100, 100, 400, 300)

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        layout = QtWidgets.QVBoxLayout(central_widget)

        self.list_widget = QtWidgets.QListWidget()
        for i in range(10):
            item = QtWidgets.QListWidgetItem(f"Item {i}")
            self.list_widget.addItem(item)
            item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
            item.setCheckState(QtCore.Qt.Unchecked)
        layout.addWidget(self.list_widget)

        self.delete_button = QtWidgets.QPushButton("删除选中的项目")
        self.delete_button.clicked.connect(self.delete_checked_items)
        layout.addWidget(self.delete_button)


    # 方法一:可以实现
    def delete_checked_items(self):
        items = self.list_widget.findItems("", QtCore.Qt.MatchContains)
        for item in items:
            if item.checkState() == QtCore.Qt.Checked:
                self.list_widget.takeItem(self.list_widget.row(item))

    # 方法二:可以实现
    # def delete_checked_items(self):
    #     count = self.list_widget.count()
    #     for i in range(count - 1, -1, -1):  # 从后往前遍历,删除项目不会影响未遍历到的索引
    #         item = self.list_widget.item(i)
    #         if item is not None and item.checkState() == QtCore.Qt.Checked:
    #             self.list_widget.takeItem(self.list_widget.row(item))


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中使用PySide6实现读取文件时的环形进度条,可以按照以下步骤进行操作: 1. 首先,确保已经安装了PySide6库。可以使用以下命令进行安装: ```shell pip install PySide6 ``` 2. 创建一个Python脚本,并导入必要的模块: ```python from PySide6.QtWidgets import QApplication, QMainWindow, QProgressBar from PySide6.QtCore import Qt, QThread, Signal ``` 3. 创建一个自定义的线程类,用于模拟文件读取的进度: ```python class FileReadThread(QThread): progressChanged = Signal(int) def run(self): total_size = 1000 # 假设文件总大小为1000 for i in range(total_size): self.progressChanged.emit(i) self.msleep(10) # 模拟读取文件的延迟 ``` 4. 创建一个主窗口类,并在其中添加一个环形进度条: ```python class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("文件读取进度") self.resize(300, 200) self.progress_bar = QProgressBar(self) self.progress_bar.setGeometry(50, 50, 200, 200) self.progress_bar.setRange(0, 1000) # 设置进度条的范围 self.file_read_thread = FileReadThread() self.file_read_thread.progressChanged.connect(self.update_progress) self.file_read_thread.start() def update_progress(self, value): self.progress_bar.setValue(value) ``` 5. 创建一个应用程序对象,并运行主窗口: ```python app = QApplication([]) window = MainWindow() window.show() app.exec() ``` 这样,当运行该脚本时,会显示一个带有环形进度条的窗口,进度条会模拟文件读取的进度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值