Встраивание графиков в виджете
Не получается вывести 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", "Главное окно"))

