鱼C论坛

 找回密码
 立即注册
查看: 1625|回复: 7

pyside6 的 Qlistwidget 清空后 重新加入元素后崩溃请问是怎么导致的

[复制链接]
发表于 2024-4-18 16:08:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 klikli234 于 2024-4-18 21:07 编辑

不知道怎么回事. 我检查了对象好像也没有被销毁就莫名奇妙崩溃了, 看代码
  1. # This Python file uses the following encoding: utf-8
  2. import sys

  3. from PySide6.QtCore import Qt
  4. from PySide6.QtWidgets import QApplication, QMainWindow, QListWidgetItem

  5. # Important:
  6. # You need to run the following command to generate the ui_form.py file
  7. #     pyside6-uic form.ui -o ui_form.py, or
  8. #     pyside2-uic form.ui -o ui_form.py
  9. from ui_form import Ui_MainWindow

  10. class MainWindow(QMainWindow):
  11.     def __init__(self, parent=None):
  12.         super().__init__(parent)
  13.         self.ui = Ui_MainWindow()
  14.         self.ui.setupUi(self)

  15.         item1 = QListWidgetItem("task 1")
  16.         item2 = QListWidgetItem("task 2")

  17.         self.ui.listWidget.addItem(item1)
  18.         self.ui.listWidget.addItem(item2)

  19.         action_data_list: List[QListWidgetItem] = []
  20.         action_data_list_2: List[QListWidgetItem] = []
  21.         action_data_list.append(QListWidgetItem("action 1"))
  22.         action_data_list.append(QListWidgetItem("action 2"))

  23.         self.ui.listWidget_2.addItem(action_data_list[0])
  24.         self.ui.listWidget_2.addItem(action_data_list[1])

  25.         item1.setData(Qt.UserRole, action_data_list)
  26.         item2.setData(Qt.UserRole, action_data_list_2)

  27.         self.ui.listWidget.itemClicked.connect(self.reload)

  28.     # reload item to listWidget_2
  29.     def reload(self):
  30.         current_item = self.ui.listWidget.currentItem()
  31.         action_data_list = current_item.data(Qt.UserRole)
  32.         for i in range(self.ui.listWidget_2.count()):
  33.             self.ui.listWidget_2.takeItem(0)
  34.         self.ui.listWidget_2.clear()
  35.         for action_data in action_data_list:
  36.             self.ui.listWidget_2.addItem(action_data)

  37. if __name__ == "__main__":
  38.     app = QApplication(sys.argv)
  39.     widget = MainWindow()
  40.     widget.show()
  41.     sys.exit(app.exec())
复制代码


调用reload 函数就会导致这个问题.请帮我看看,非常感谢.

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-4-18 16:16:36 | 显示全部楼层
FishC 发表于 2024-4-18 16:08
问题出在reload函数中的两行代码:
  1. for i in range(self.ui.listWidget_2.count()):
  2.     self.ui.listWidget_2.takeItem(0)
复制代码


是正确清空了的, 但是在清空后, 重新载入就会崩溃.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-18 16:19:25 | 显示全部楼层
FishC 发表于 2024-4-18 16:16
非常抱歉,我刚才理解错了你的问题。

在重新加载`listWidget_2`时,你需要注意避免重复添加相同的项 ...
  1. self.ui.listWidget_2.clear()
复制代码

会删除数据, 可能只能用TakeItem来做
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-18 21:07:02 | 显示全部楼层
FishC 发表于 2024-4-18 16:19
非常抱歉,我之前的回答有误。确实,`clear()`方法会将列表中的项删除,但是它同时也会删除与这些项相 ...

pyside6 的问题 换到pyside2 解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表