以下程序是尝试将“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 解释器就会崩溃。
我阅读了这个答案并尝试了一些变体,例如删除Cell.__init__()
方法的参数或传递self
给Cell()
in clone()
,但总是得到相同的结果。
我正在使用 Python 2.7.3 win32 和 PySide 1.1.2 。我究竟做错了什么?