Встраивание графиков в виджете

введите сюда описание изображения

Не получается вывести 2 графика в Главном окне. Почему-то выводится один график и тот центрированный.

Хотелось бы видеть графики в определенных местах, например, один ближе к левому верхнему углу, а другой ближе к правому углу.

main.py

import sys
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QTableWidgetItem, QTableWidget, QLineEdit, QMenu, QMessageBox, QAbstractItemView
from two_graph import Ui_FirstWindow
import pandas as pd
import pyqtgraph as pg
import numpy as np

class FirstWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(FirstWindow, self).__init__()
        self.ui = Ui_FirstWindow()
        self.ui.setupUi(self)

        x1 = [12, 34, 33, 54, 67, 72, 85]
        y1 = [20, 44, 53, 90, 11, 2, 5]

        x2 = [2, 3, 4, 5, 6, 7, 8]
        y2 = [120, 244, 453, 490, 411, 12, 25]

        self.widgetGraph1 = self.ui.widget1

        self.ui.widget1 = pg.PlotWidget(title='График 1')
        self.ui.widget1.setGeometry(QtCore.QRect(40, 0, 81, 55))
        self.ui.widget1.setFixedSize(250, 100)
        self.ui.widget1.setObjectName("widgetGraph1")
        self.ui.widget = QtWidgets.QWidget()
        self.ui.layout = QtWidgets.QGridLayout(self.ui.centralwidget)
        self.ui.layout.setContentsMargins(15, 90, 0, 0)
        self.ui.layout.addWidget(self.ui.widget1, 0, 0, 1, 1)

        self.widgetGraph2 = self.ui.widget2

        self.ui.widget2 = pg.PlotWidget(title='График 2')
        self.ui.widget2.setGeometry(QtCore.QRect(40, 0, 81, 55))
        self.ui.widget2.setFixedSize(250, 100)
        self.ui.widget2.setObjectName("widgetGraph2")
        self.ui.widget = QtWidgets.QWidget()
        self.ui.layout = QtWidgets.QGridLayout(self.ui.centralwidget)
        self.ui.layout.setContentsMargins(15, 90, 0, 0)
        self.ui.layout.addWidget(self.ui.widget2, 0, 0, 1, 1)

        self.plot1(x1, y1)
        self.plot2(x2, y2)

    def plot1(self, x1, y1):
        self.ui.widget1.clear()
        self.ui.widget1.plot(x1, y1, pen= 'g')
        self.ui.widget1.setBackground((235, 235, 235))
        self.ui.widget1.setLabel('left', 'X', )
        self.ui.widget1.setLabel('bottom', 'Y', )

    def plot2(self, x2, y2):
        self.ui.widget2.clear()
        self.ui.widget2.plot(x2, y2, pen= 'r')
        self.ui.widget2.setBackground((235, 235, 235))
        self.ui.widget2.setLabel('left', 'X2', )
        self.ui.widget2.setLabel('bottom', 'Y2', )

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = FirstWindow()
    w.show()
    sys.exit(app.exec())

two_graph.py

from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_FirstWindow(object):
    def setupUi(self, FirstWindow):
        FirstWindow.setObjectName("FirstWindow")
        FirstWindow.resize(780, 600)
        self.centralwidget = QtWidgets.QWidget(FirstWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.widget1 = QtWidgets.QWidget(self.centralwidget)
        self.widget1.setGeometry(QtCore.QRect(30, 20, 311, 191))
        self.widget1.setObjectName("widget1")
        self.widget2 = QtWidgets.QWidget(self.centralwidget)
        self.widget2.setGeometry(QtCore.QRect(200, 290, 311, 191))
        self.widget2.setObjectName("widget2")
        FirstWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(FirstWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 780, 22))
        self.menubar.setObjectName("menubar")
        FirstWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(FirstWindow)
        self.statusbar.setObjectName("statusbar")
        FirstWindow.setStatusBar(self.statusbar)

        self.retranslateUi(FirstWindow)
        QtCore.QMetaObject.connectSlotsByName(FirstWindow)

    def retranslateUi(self, FirstWindow):
        _translate = QtCore.QCoreApplication.translate
        FirstWindow.setWindowTitle(_translate("FirstWindow", "Главное окно"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    FirstWindow = QtWidgets.QMainWindow()
    ui = Ui_FirstWindow()
    ui.setupUi(FirstWindow)
    FirstWindow.show()
    sys.exit(app.exec())


Ответы (1 шт):

Автор решения: S. Nick

Это называется встраивание виджетов в Qt Designer, вы можете найти похожие вопросы с подробным описанием как это делается.
А выглядит это примерно так:

q1443835_main.py

import sys
'''
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QTableWidgetItem, QTableWidget, \
    QLineEdit, QMenu, QMessageBox, QAbstractItemView
'''
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

from q1443835_two_graph import Ui_FirstWindow                             

import pandas as pd
import pyqtgraph as pg
import numpy as np


class FirstWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(FirstWindow, self).__init__()
        self.ui = Ui_FirstWindow()
        self.ui.setupUi(self)

        x1 = [12, 34, 33, 54, 67, 72, 85]
        y1 = [20, 44, 53, 90, 11, 2, 5]

        x2 = [2, 3, 4, 5, 6, 7, 8]
        y2 = [120, 244, 453, 490, 411, 12, 25]

# ??? vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        '''
        self.widgetGraph1 = self.ui.widget1

        self.ui.widget1 = pg.PlotWidget(title='График 1')
        self.ui.widget1.setGeometry(QtCore.QRect(40, 0, 81, 55))
        self.ui.widget1.setFixedSize(250, 100)
        self.ui.widget1.setObjectName("widgetGraph1")
        
        self.ui.widget = QtWidgets.QWidget()
        self.ui.layout = QtWidgets.QGridLayout(self.ui.centralwidget)
        self.ui.layout.setContentsMargins(15, 90, 0, 0)
        self.ui.layout.addWidget(self.ui.widget1, 0, 0, 1, 1)

        self.widgetGraph2 = self.ui.widget2
        self.ui.widget2 = pg.PlotWidget(title='График 2')
        self.ui.widget2.setGeometry(QtCore.QRect(40, 0, 81, 55))
        self.ui.widget2.setFixedSize(250, 100)
        self.ui.widget2.setObjectName("widgetGraph2")
        
        self.ui.widget = QtWidgets.QWidget()
        self.ui.layout = QtWidgets.QGridLayout(self.ui.centralwidget)
        self.ui.layout.setContentsMargins(15, 90, 0, 0)
        self.ui.layout.addWidget(self.ui.widget2, 0, 0, 1, 1)
        '''
# ??? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        self.ui.layout = QtWidgets.QGridLayout(self.ui.centralwidget)
# ----------------------------------------------> vvvv <--------------------        
        self.ui.layout.addWidget(self.ui.widget1, 0, 0, 1, 1)
        self.ui.layout.addWidget(self.ui.widget2, 1, 1, 1, 1)
# ----------------------------------------------> ^^^^ <--------------------

        self.plot1(x1, y1)
        self.plot2(x2, y2)

    def plot1(self, x1, y1):
        self.ui.widget1.clear()
        self.ui.widget1.plot(x1, y1, pen= 'g')
        self.ui.widget1.setBackground((235, 235, 235))
        self.ui.widget1.setLabel('left', 'X', )
        self.ui.widget1.setLabel('bottom', 'Y', )

    def plot2(self, x2, y2):
        self.ui.widget2.clear()
        self.ui.widget2.plot(x2, y2, pen= 'r')
        self.ui.widget2.setBackground((235, 235, 235))
        self.ui.widget2.setLabel('left', 'X2', )
        self.ui.widget2.setLabel('bottom', 'Y2', )


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = FirstWindow()
    w.show()
    sys.exit(app.exec())

q1443835_two_graph.py

'''
from PyQt6 import QtCore, QtGui, QtWidgets
'''
from PyQt5 import QtCore, QtGui, QtWidgets
import pyqtgraph as pg                                                    # !!! +++


class Ui_FirstWindow(object):
    def setupUi(self, FirstWindow):
        FirstWindow.setObjectName("FirstWindow")
        FirstWindow.resize(780, 600)
        self.centralwidget = QtWidgets.QWidget(FirstWindow)
        self.centralwidget.setObjectName("centralwidget")
        
        
#        self.widget1 = QtWidgets.QWidget(self.centralwidget)
        self.widget1 = pg.PlotWidget(title='График 1')                    # !!! +++
        
        self.widget1.setGeometry(QtCore.QRect(30, 20, 311, 191))
        self.widget1.setObjectName("widget1")
        
#        self.widget2 = QtWidgets.QWidget(self.centralwidget)
        self.widget2 = pg.PlotWidget(title='График 2')                    # !!! +++

        self.widget2.setGeometry(QtCore.QRect(200, 290, 311, 191))
        self.widget2.setObjectName("widget2")
        
        FirstWindow.setCentralWidget(self.centralwidget)
        
        
        '''
        self.menubar = QtWidgets.QMenuBar(FirstWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 780, 22))
        self.menubar.setObjectName("menubar")
        FirstWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(FirstWindow)
        self.statusbar.setObjectName("statusbar")
        FirstWindow.setStatusBar(self.statusbar)
        '''
        self.retranslateUi(FirstWindow)
        QtCore.QMetaObject.connectSlotsByName(FirstWindow)

    def retranslateUi(self, FirstWindow):
        _translate = QtCore.QCoreApplication.translate
        FirstWindow.setWindowTitle(_translate("FirstWindow", "Главное окно"))

введите сюда описание изображения

→ Ссылка