Seite 1 von 1

PyQt6 / QTableView()

Verfasst: Mittwoch 11. Dezember 2024, 17:35
von Knollo
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

Re: PyQt6 / QTableView()

Verfasst: Mittwoch 11. Dezember 2024, 18:31
von __blackjack__
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.

Re: PyQt6 / QTableView()

Verfasst: Mittwoch 11. Dezember 2024, 20:45
von Knollo
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