QT (PyQT4) mit RPY

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Hallo zusammen,

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_()) 
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Alle ratlos?
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
Antworten