Seite 1 von 1

errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 07:48
von kkornfield
Hi
gerade am verzweifeln. ;-(
diese Zeile
self.graphicsView = PlotWidget(self.centralwidget)
Verursacht bei mir ein error. Allerdings nur wenn ich den code debuge und nicht in run configuration. Weiss jemand warum:
Error report:
TypeError: arguments did not match any overloaded call:
QGraphicsView(parent: QWidget = None): argument 1 has unexpected type 'PySide6.QtWidgets.QWidget'
QGraphicsView(QGraphicsScene, parent: QWidget = None): argument 1 has unexpected type 'PySide6.QtWidgets.QWidget'
python-BaseException
Fatal Python error: Cannot recover from stack overflow.


mein ui_mainwindow.py:

Code: Alles auswählen

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'mainwindow.ui'
##
## Created by: Qt User Interface Compiler version 6.2.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QMainWindow, QMenuBar, QSizePolicy,
    QStatusBar, QWidget)

from pyqtgraph import PlotWidget

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.graphicsView = PlotWidget(self.centralwidget)
        self.graphicsView.setObjectName(u"graphicsView")
        self.graphicsView.setGeometry(QRect(40, 50, 721, 221))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 800, 22))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)


        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

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

und mein main.py:

Code: Alles auswählen

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from ui_mainwindow import Ui_MainWindow
import numpy as np
import random


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec())

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 09:29
von sparrow
Die Antwort ist: Höre auf generierten Code zu verwenden und dann auch noch darin herum zu editieren. Die ersten Zeilen mit dem Kommentar hast du gelesen?

Statt generierten Code zu verwenden, benutze die .ui-Datei direkt. Das Stichwort heißt loadui. Wenn ich mich richtig erinnere, ist das bei pyside etwas anders als pyqt, aber es gibt ein externes Modul, was das anpasst.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 09:30
von __blackjack__
@kkornfield: Wie kommt denn die Zeile dort hin? Und auch der Import von `PlotWidget`? Von Hand hast Du das dort hoffentlich nicht rein geschrieben — siehe generierten Kommentar am Anfang der Datei. Wobei man solche Dateien auch nicht generiert, sondern die *.ui-Datei zur Laufzeit lädt.

Ansonstent scheint `pyqtgraph` wie der Name schon sagt für PyQt zu sein, nicht für PySide.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 09:49
von kkornfield
Hi
nein ich habe den Code nicht editiert. ui_mainwindow.py habe ich mit
pyside6-uic mainwindow.ui >>Ui_MainWindow.py
generiert.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 10:16
von kkornfield
Hi
und jetzt steige ich den ui file direkt zu verwenden. In der tat kann ich hier debuggen.
Jetzt habe ich das problem: wie plote ich da rein?
window.graphicsView.plot(time, amplitude)
AttributeError: 'PySide6.QtWidgets.QGraphicsView' object has no attribute 'plot'

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 10:17
von __deets__
pyqtgraph scheint tatsaechlich beide Qt-Pakete zu unterstuetzen. Was aber ggf. trotzdem irgendwie mit deiner Umgebung kollidiert, und das falsche Qt-Paket anzieht, wenn du debugst. Dazu muesstest du mal in der debug und normalen Umgebung jeweils den genauen Typ von PlotWidget ermitteln.

Und wenn du das da nicht reingeschrieben hast, woher kommen denn die Importe und die Instanziierung des PlotWidget?

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 10:27
von __blackjack__
@kkornfield: Dann macht was immer Du da zum „debuggen“ verwendest, offenbar etwas komisches. Verwende was anderes, oder lass das „debuggen“ auf diese Art und Weise einfach sein. Ich habe in den mittlerweile Jahrzehnten die ich Python verwende nur eine handvoll Situationen gehabt in denen ich tatsächlich einen Debugger eingesetzt habe. Keine davon hatte mit GUIs zu tun, und fast alle mit Algorithmen die von anderen Programmiersprachen portiert waren und die massiv unpythonisch waren, also mit einem Haufen Schleifen mit Indexvariablen/-zugriffen. Also da wo man wirklich Schrittweise durch den Algorithmus gehen muss um Fehler zu finden, und interaktiv ausprobieren, Logging-Ausgaben, und Unit-Tests nicht weitergeholfen haben.

Das einzige was ich speziell für die Fehlersuche manchmal einsetze ist das `icecream`-Modul um leichter Ausgaben zu machen ohne den Code zu stark zu ändern. Quasi als `print()`-Ersatz der das Ausgegebene auch als Wert unverändert zurück gibt, mit ein paar netten automagischen Extras bei der Ausgabe.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 12:22
von kkornfield
>> Und wenn du das da nicht reingeschrieben hast, woher kommen denn die Importe und die Instanziierung des PlotWidget?
das habe ich wieder verifiziert:
pyside6-uic mainwindow.ui >>Ui_MainWindow.py
pyside6-uic generiert die importe und den rest, ich habe es nicht verändert.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 12:24
von kkornfield
Und sieht jemand warum das nicht geht?

>>window.graphicsView.plot(time, amplitude)
>>AttributeError: 'PySide6.QtWidgets.QGraphicsView' object has no attribute 'plot'

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 13:45
von __deets__
Das muesste ja auch ein PlotWidget sein. Daher kam ja auch die Frage, wie das da reingekommen ist. Weil magisch geht's nicht. Man kann im Designer bestimmte Dinge mit Custom Widgets machen, darum habe ich gefragt, wie du das PlotWidget darein bekommen hast. Darauf gab's noch keine richtige Antwort.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 13:52
von kkornfield
ich bin ein QT Einsteiger: beantwortet das deine Frage:
ich habe in Qt Creator ein display widgets-> graphic view pre drag and drop in mein Form rein getan. Dann habe ich per rechts click es promototed zu PlotWidget und pyqtgraph.h als header file.
Stellt das ein Problem dar?

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 13:56
von __deets__
Na ob das ein Problem darstellt versuchen wir ja gerade rauszufinden. Und das er die Klasse QGraphicsView erwaehnt, die nunmal wirklich kein plot kennt, spricht erstmal nicht dafuer, dass es geklappt hat mit dem PlotWidget. Steht das also immer noch in dem generierten Code?

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 14:02
von kkornfield
Ja, das steht immer noch im generierten code.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 14:35
von __blackjack__
@__deets__: `PlotWidget` ist aber letztlich von QGraphicsView abgeleitet, das vorgehen müsste also an sich schon so stimmen.

@kkornfield: Funktioniert das Programm denn wenn man es normal laufen lässt? Ansonsten scheint das wirklich ein Problem von Deinem „debugging“ zu sein, wo Du glaube ich noch nicht verraten hast was das genau bedeutet.

Re: errror QGraphicsView

Verfasst: Dienstag 20. September 2022, 15:00
von __deets__
@__blackjack__: ich wuerde da aber trotzdem erwarten, dass er auch "PlotWidget" in der Fehlermeldung sagt. Und nicht QGraphicsView. Das plot ist doch Teil der abgeleiteten Klasse, und wenn der Designer nur ein QGraphicsView instantiiert, fehlt eben genau das. Warum auch immer das im "debug" anders ist - da hast du natuerlich sehr recht, was da passiert, muss erstmal klar werden.

Re: errror QGraphicsView

Verfasst: Samstag 24. September 2022, 15:17
von kkornfield
Hi
Gelöst: es war wohl ein dependency issue. Ich habe diesmal alle mein Module unter Python3.7 und PIP installiert und nicht mit Python 3.8 und conda install.