编辑:这已在Qt 6.7更新中修复.

如果我运行下面的代码,然后try 通过双击或开始输入来编辑第一个单元格,窗口就会冻结并关闭,输出为Segmentation fault (core dumped).

如果我禁用编辑单元格或使用PyQt 5,则此问题已得到修复.

如果我取消设置WAYLAND_SYS环境变量以强制程序在Xwayyland中运行(或者至少我认为它是这样做的),它不会崩溃,这样做会打印:

Failed to create wl_display (Connection refused)
qt.qpa.plugin: Could not load the Qt platform plugin "wayland" in "" even though it was found.

尽管它仍然有效.

我希望能够显示表格中单元格内部的图像. 我试图通过创建一个标签、将其像素映射设置为图像,然后使用table.setCellWidget来做到这一点,但后来我遇到了这个问题.

这看起来像是PyQt 6/ Qt错误,但如果不是,有没有方法可以在不使用上面显示的修复的情况下修复这个问题?

如果有关系的话,以下是我的PyQt 6版本(我已经try 过使用pip安装和使用包管理器提供的系统包):

PyQt6      6.6.1
PyQt6-Qt6  6.6.3
PyQt6-sip  13.6.0

代码:

from PyQt6 import QtWidgets


class Crash(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Crash")
        self.resize(800, 600)
        self.show()
        self.init_ui()

    def init_ui(self):
        self.table = QtWidgets.QTableWidget()
        self.setCentralWidget(self.table)

        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(["text", "widget"])

        self.table.insertRow(0)
        self.table.setItem(0, 0, QtWidgets.QTableWidgetItem("text"))

        widget = QtWidgets.QWidget()

        self.table.setCellWidget(0, 1, widget)


if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    window = Crash()
    app.exec()

启用日志(log)记录后的2个日志(log)文件here: xwayland wayland

推荐答案

编辑:这已在Qt 6.7更新中修复.

感谢@musicamante,我设法使用Qt.ItemDataRole.DecorationRole来获得图像.

新代码:

from PyQt6 import QtWidgets, QtGui, QtCore


class Crash(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Crash")
        self.resize(800, 600)
        self.show()
        self.init_ui()

    def init_ui(self):
        self.table = QtWidgets.QTableWidget()
        self.setCentralWidget(self.table)

        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(["text", "widget"])

        self.table.insertRow(0)
        self.table.setItem(0, 0, QtWidgets.QTableWidgetItem("text"))

        # set img with Qt.ItemDataRole.DecorationRole instead
        img_path = "img.png"
        img = QtGui.QPixmap(img_path)
        item = QtWidgets.QTableWidgetItem()
        item.setData(QtCore.Qt.ItemDataRole.DecorationRole, img)
        self.table.setItem(0, 1, item)


if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    window = Crash()
    app.exec()


Python相关问答推荐

对Numpy函数进行载体化

如何使用pandasDataFrames和scipy高度优化相关性计算

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

大小为M的第N位_计数(或人口计数)的公式

如何获得每个组的时间戳差异?

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

Pre—Commit MyPy无法禁用非错误消息

形状弃用警告与组合多边形和多边形如何解决

如何在图中标记平均点?

字符串合并语法在哪里记录

如何从需要点击/切换的网页中提取表格?

Python—为什么我的代码返回一个TypeError

为什么Python内存中的列表大小与文档不匹配?

30个非DATETIME天内的累计金额

无法在Spyder上的Pandas中将本地CSV转换为数据帧

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

Scipy差分进化:如何传递矩阵作为参数进行优化?

无法在盐流道中获得柱子

在Pandas 中以十六进制显示/打印列?

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?