I already wrote here before, but I deleted the question, because there were no specifics. Now I'll bring it in.
I have an application that I have developed in PyQt6. It contains three buttons for switching: if you click on the " 2 page" button, there will be 2 pages with the inscription 2 page and similarly with the "3 page" button. The question is: page 1 should display a plot, in the pizdec area, however I get the following error:
AttributeError: 'QWidget' object has no attribute 'plot'.
I'm not really good at OOP yet, so I don't quite understand how to fix it. For plotting i use pyqtgraph library. Code generated by Qt Designer.
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setEnabled(True)
MainWindow.resize(1495, 788)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setStyleSheet("\n"
"background-color: rgb(222, 222, 222);")
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(parent=self.centralwidget)
self.frame.setGeometry(QtCore.QRect(0, 0, 131, 761))
self.frame.setStyleSheet("background-color: rgb(21, 21, 21);")
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
self.frame.setObjectName("frame")
self.verticalLayoutWidget = QtWidgets.QWidget(parent=self.frame)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 80, 111, 261))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(parent=self.verticalLayoutWidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())
self.pushButton.setSizePolicy(sizePolicy)
self.pushButton.setStyleSheet("border: 0px solid;\n"
"color: rgb(255, 255, 255);\n"
"")
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_3 = QtWidgets.QPushButton(parent=self.verticalLayoutWidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth())
self.pushButton_3.setSizePolicy(sizePolicy)
self.pushButton_3.setStyleSheet("border: 0px solid;\n"
"color: rgb(255, 255, 255);")
self.pushButton_3.setObjectName("pushButton_3")
self.verticalLayout.addWidget(self.pushButton_3)
self.pushButton_2 = QtWidgets.QPushButton(parent=self.verticalLayoutWidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth())
self.pushButton_2.setSizePolicy(sizePolicy)
self.pushButton_2.setStyleSheet("border: 0px solid;\n"
"color: rgb(255, 255, 255);")
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
self.frame_2 = QtWidgets.QFrame(parent=self.centralwidget)
self.frame_2.setGeometry(QtCore.QRect(130, 0, 1371, 31))
self.frame_2.setStyleSheet("background-color: rgb(25, 25, 25);")
self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
self.frame_2.setObjectName("frame_2")
self.frame_3 = QtWidgets.QFrame(parent=self.centralwidget)
self.frame_3.setGeometry(QtCore.QRect(130, 30, 1371, 731))
self.frame_3.setStyleSheet("background-color: rgb(71, 71, 71);\n"
"background-color: rgb(34, 34, 34);")
self.frame_3.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
self.frame_3.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
self.frame_3.setObjectName("frame_3")
self.graph = QtWidgets.QStackedWidget(parent=self.frame_3)
self.graph.setGeometry(QtCore.QRect(0, 10, 1361, 721))
self.graph.setObjectName("graph")
self.page = QtWidgets.QWidget()
self.page.setObjectName("page")
self.pizdec = QtWidgets.QWidget(parent=self.page)
self.pizdec.setGeometry(QtCore.QRect(70, 20, 1231, 441))
self.pizdec.setObjectName("pizdec")
self.graph.addWidget(self.page)
self.page_2 = QtWidgets.QWidget()
self.page_2.setObjectName("page_2")
self.label_2 = QtWidgets.QLabel(parent=self.page_2)
self.label_2.setGeometry(QtCore.QRect(210, 100, 831, 401))
font = QtGui.QFont()
font.setPointSize(80)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.graph.addWidget(self.page_2)
self.page_3 = QtWidgets.QWidget()
self.page_3.setObjectName("page_3")
self.label_3 = QtWidgets.QLabel(parent=self.page_3)
self.label_3.setGeometry(QtCore.QRect(300, 100, 831, 401))
font = QtGui.QFont()
font.setPointSize(80)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.graph.addWidget(self.page_3)
self.frame_3.raise_()
self.frame.raise_()
self.frame_2.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1495, 26))
self.menubar.setObjectName("menubar")
self.menuw3rrewd = QtWidgets.QMenu(parent=self.menubar)
self.menuw3rrewd.setObjectName("menuw3rrewd")
MainWindow.setMenuBar(self.menubar)
self.menubar.addAction(self.menuw3rrewd.menuAction())
self.retranslateUi(MainWindow)
self.graph.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "1 page"))
self.pushButton_3.setText(_translate("MainWindow", "2 page"))
self.pushButton_2.setText(_translate("MainWindow", "3 page"))
self.label_2.setText(_translate("MainWindow", "2 page"))
self.label_3.setText(_translate("MainWindow", "3 page"))
self.menuw3rrewd.setTitle(_translate("MainWindow", "w3rrewd"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
Here's the logic code I wrote.
import sys
from PyQt6 import QtWidgets, QtGui, QtCore
from untdwdfd import Ui_MainWindow
from pyqtgraph import PlotWidget
import pyqtgraph as pg
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
QtCore.QMetaObject.connectSlotsByName(self)
self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
@QtCore.pyqtSlot()
def on_pushButton_clicked(self):
self.graph.setCurrentIndex(0)
@QtCore.pyqtSlot()
def on_pushButton_3_clicked(self):
self.graph.setCurrentIndex(1)
@QtCore.pyqtSlot()
def on_pushButton_2_clicked(self):
self.graph.setCurrentIndex(2)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
If you look at your UI
file you might notice that self.pizdec
is defined as a QWidget
.
#line 80ish
self.pizdec = QtWidgets.QWidget(parent=self.page)
self.pizdec.setGeometry(QtCore.QRect(70, 20, 1231, 441))
self.pizdec.setObjectName("pizdec")
And then in your logic file you are calling:
self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
You are receiving the error because QWidget
doesn't have a plot
method.
You technically shouldn't edit the uic files, so what you can do is edit your ui in designer and leave an empty space where self.pizdec
is and then add the widget in your logic file.
For example:
import sys
from PyQt6 import QtWidgets, QtGui, QtCore
from untdwdfd import Ui_MainWindow
from pyqtgraph import PlotWidget
import pyqtgraph as pg
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
QtCore.QMetaObject.connectSlotsByName(self)
self.pizdec = QPlotWidget(parent=self.page)
self.pizdec.setGeometry(QtCore.QRect(70, 20, 1231, 441))
self.pizdec.setObjectName("pizdec")
self.pizdec.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
@QtCore.pyqtSlot()
def on_pushButton_clicked(self):
self.graph.setCurrentIndex(0)
@QtCore.pyqtSlot()
def on_pushButton_3_clicked(self):
self.graph.setCurrentIndex(1)
@QtCore.pyqtSlot()
def on_pushButton_2_clicked(self):
self.graph.setCurrentIndex(2)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())