PyQt6 / QTableView()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

Hallo in die Runde, ich versuche grad die Anleitung von https://www.pythonguis.com/tutorials/py ... py-pandas/ nachzubauen.
Dazu hab ich eine Oberfläche mit einem QTableView erstellt.

Code: Alles auswählen

from PySide6.QtCore import (QCoreApplication,QMetaObject)
from PySide6.QtWidgets import (QFrame, QTableView, QVBoxLayout, QWidget)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName(u"verticalLayout_2")
        self.frame = QFrame(self.centralwidget)
        self.frame.setObjectName(u"frame")
        self.frame.setFrameShape(QFrame.StyledPanel)
        self.frame.setFrameShadow(QFrame.Raised)
        self.verticalLayout = QVBoxLayout(self.frame)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.tablel_view = QTableView(self.frame)
        self.tablel_view.setObjectName(u"tablel_view")

        self.verticalLayout.addWidget(self.tablel_view)


        self.verticalLayout_2.addWidget(self.frame)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
    # retranslateUi
welche hier importiert wird:

Code: Alles auswählen

import os
import sys
from mainwindow import Ui_MainWindow
from PySide6 import QtWidgets
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtGui import Qt
from PyQt6 import QtCore

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self, data):
        super().__init__()
        self._data = data

    def data(self, index, role):
        if role == Qt.ItemDataRole.DisplayRole:
            # See below for the nested-list data structure.
            # .row() indexes into the outer list,
            # .column() indexes into the sub-list
            return self._data[index.row()][index.column()]

    def rowCount(self, index):
        # The length of the outer list.
        return len(self._data)

    def columnCount(self, index):
        # The following takes the first sub-list, and returns
        # the length (only works if all rows are an equal length)
        return len(self._data[0])
    

basedir = os.path.dirname(__file__)
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowTitle("Tableview")

        # self.table = QtWidgets.QTableView()
        data = [
          [4, 9, 2],
          [1, 0, 0],
          [3, 5, 0],
          [3, 3, 2],
          [7, 8, 9],
        ]

        self.model = TableModel(data)
        # in der Folgezeile wird gemeckert : 'table_view' soll verwendet werden, was läuft falsch?
        self.tablel_view.setModel(self.model)


app = QApplication(sys.argv)

window = MainWindow()
window.show()
app.exec()
an der Stelle von 'self.tablel_view.setModel(self.model)' wird gemeckert, was mach ich falsch?

Danke - Stefan
Benutzeravatar
__blackjack__
User
Beiträge: 13997
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Was heisst denn ”wird gemeckert”? Wer ”meckert” da über was?

Eventuell ist das so gar keine gute Idee PySide und PyQt zu mischen. Die müssen ja nicht gegen die selben Bibliotheken gelinkt sein.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

Eventuell ist das so gar keine gute Idee PySide und PyQt zu mischen.
... Du hast recht - das war der Fehler.

Code: Alles auswählen

from PyQt6 import QtCoret # falsch
from PySide6 import QtCore # richtig
verwenden und der Code funzt.

Danke - Stefan
Antworten