如何子类化QTableWidgetItem

时间:2012-10-22 22:13:11

标签: python pyside

以下程序是尝试将"C++ GUI Programming with Qt 4 (2nd Edition)"中的电子表格示例转换为Python和PySide的简化示例。我正在尝试将QTableWidgetItem类子类化,以便为QTableWidget提供我自己的元素类型。

import sys

from PySide.QtGui import QApplication, QTableWidget, QTableWidgetItem

class Cell(QTableWidgetItem):
    def __init__(self, *args, **kwargs):
        super(Cell, self).__init__(*args, **kwargs)

    def clone(self):
        c = Cell()
        return c

class Spreadsheet(QTableWidget):
    def __init__(self, parent=None):
        super(Spreadsheet, self).__init__(parent)
        self.setItemPrototype(Cell())
        self.clear()

    def clear(self):
        self.setRowCount(0)
        self.setColumnCount(0)
        self.setRowCount(999)
        self.setColumnCount(26)
        for i in range(0, 26):
            item = QTableWidgetItem()
            item.setText(chr(ord('A') + i))
            self.setHorizontalHeaderItem(i, item)
        self.setCurrentCell(0, 0)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    s = Spreadsheet()
    s.show()
    sys.exit(app.exec_())

如果我单击一个单元格,输入一个字符,然后单击第二个单元格,Python解释程序崩溃。

我看了this answer并尝试了一些变体,例如删除Cell.__init__()方法的参数或将self传递给Cell()中的clone(),但始终使用相同的结果。

我正在使用Python 2.7.3 win32和PySide 1.1.2。我做错了什么?

0 个答案:

没有答案