ich habe ein seltsammes Problem. wenn ich eine Funktion abstrakten Klasse QtCore.QAbstractTableModel überschreibe und in dieser einen RPy Aufruf setze, der ausserhalb gut klappt, dann stürzt mir mein Programm ab.
Ich denke dass es mit dem SPeicher konflikte gibt. starte ich diesen Aufruf in einem eigenen Thread (damit wird ja glaub ich explizit in einen anderen Speicherbereich geschrieben..) klappt alles.
Ich hoffe Ihr habt einen Tip. mit Threads ist nicht wirklich eine Lösung!
Gibt es sonst einen Möglichkeit Speicherbereiche für Funktionen manuell zu bestimmen?
Liegt der Fehler an etwas anderem?
Anbei ein vereinfachter Code:
Code: Alles auswählen
import sys
from PyQt4 import QtCore, QtGui
from rpy import *
class QagsDataFrameModel(QtCore.QAbstractTableModel):
def __init__(self, data_frame, parent = None):
QtCore.QAbstractTableModel.__init__(self, parent)
self._dataFrame = data_frame
def columnCount(self, parent):
return 2
def data(self, index, role):
if not index.isValid():
return QtCore.QVariant()
if role != QtCore.Qt.DisplayRole:
return QtCore.QVariant()
return QtCore.QVariant("2")
def headerData(self, section, orientation, role):
header_names = ("s", "d")
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
if section in range(len(header_names)):
return QtCore.QVariant(header_names[section])
else:
return QtCore.QVariant()
return QtCore.QVariant()
def rowCount(self, parent):
#
# Look HERE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
#Here I call an R function:
print with_mode(BASIC_CONVERSION, r.dim)(self._dataFrame)[0]
return 3
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.fileMenu = self.menuBar().addMenu(self.tr("&File"))
self.fileMenu.addAction(self.tr("E&xit"), self,QtCore.SLOT("close()"), QtGui.QKeySequence(self.tr("Ctrl+Q")))
df = with_mode(NO_CONVERSION, r)("data.frame(x=c(1,2,3),y=c(2,3,4))")
self._model = QagsDataFrameModel(df, self)
self._view = QtGui.QTableView(self)
self._view.setModel(self._model)
self.setCentralWidget(self._view)
self.setWindowTitle(self.tr("Simple DataFrame Model"))
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.resize(640, 480)
window.show()
sys.exit(app.exec_())