Pyside6:setCellWidget导致界面莫名卡死

编程入门 行业动态 更新时间:2024-10-17 17:15:20

Pyside6:setCellWidget导致<a href=https://www.elefans.com/category/jswz/34/1769995.html style=界面莫名卡死"/>

Pyside6:setCellWidget导致界面莫名卡死

在Pyside6使用过程中,如果使用到了QTableWidget中的setCellWidget方法进行添加表格中添加按钮或其他控件的操作时,正常情况下是没有任何问题的,但在特定情况下发生了奇怪的、莫名的程序卡死,这个可能的情况如下:

  1.  子进程管道发送数据回主进程
  2. 主进程通过单例发送了一个通知给QTableWidget控件
  3. QTableWidget控件进行clear()方法,清空
  4. QTableWidget重新赋值行数,并在循环中使用setCellWidget进行按钮添加

程序卡死发生时,并没有出现任何报错,且通过cellWidget()获取widget时亦为None。

如果你也遇到了以上的情况,请按本文内容进行解决。

一、发生问题的伪代码

self.ui.table_widget.clear()
self.ui.table_widget.setHorizontalHeaderLabels(['标题', '姓名', '操作'])
self.ui.table_widget.setRowCount(3)for i in range(3):data = data_list[i]item = QTableWidgetItem(data.get('title'))self.ui.table_widget.setItem(i, 1, item)item = QTableWidgetItem(data.get('name'))self.ui.table_widget.setItem(i, 2, item)self.ui.table_widget.setCellWidget(i, 3, QPushButton('编辑'))

二、解决方案

如果发生上面的问题,解决方案即是当QTableWidget的每一行创建后就不要进行clear()操作,然后当更新数据时,仅通过setRowCount()的行数,然后把以前的item进行复用即可:

self.ui.table_widget.setHorizontalHeaderLabels(['标题', '姓名', '操作'])
self.ui.table_widget.setRowCount(3)for i in range(3):data = data_list[i]if self.ui.table_widget.item(i, 0) is None:item = QTableWidgetItem(data.get('title'))self.ui.table_widget.setItem(i, 0, item)else:item = self.ui.table_widget.item(i, 0)item.setText(data.get('title'))if self.ui.table_widget.item(i, 1) is None:item = QTableWidgetItem(data.get('name'))self.ui.table_widget.setItem(i, 1, item)else:item = self.ui.table_widget.item(i, 1)item.setText(data.get('name'))if self.ui.table_widget.cellWidget(i, 3) is None:self.ui.table_widget.setCellWidget(i, 3, QPushButton('编辑'))

三、总结

虽然复用控件会造成一定的内存消耗,但可以避免很多不明确的问题发生,所以明确什么时候复用什么时候保活,不然会出现奇怪的问题。

更多推荐

Pyside6:setCellWidget导致界面莫名卡死

本文发布于:2023-11-17 11:26:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1643971.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:界面   setCellWidget

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!