次のプログラムは、 「Qt 4 を使用した C++ GUI プログラミング (第 2 版)」のスプレッドシートの例を 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_())
セルをクリックし、文字を入力してから 2 番目のセルをクリックすると、Python インタープリターがクラッシュします。
この回答を読んで、メソッドの引数を削除したり、 inにCell.__init__()
渡したりself
するなど、いくつかのバリエーションを試しましたが、常に同じ結果が得られました。Cell()
clone()
私は Python 2.7.3 win32 と PySide 1.1.2 を使用しています。私は何を間違っていますか?