Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Example Added For Major GUI Packages #635

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions examples/gui_examples/PyQt5/pyqt5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout,QWidget
import matplotlib
matplotlib.use('Qt5Agg')
from matplotlib.backends.backend_qt5agg import ( FigureCanvasQTAgg as FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
import mplfinance as mpl
import pandas as pd

class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5 Mplfinance Example")

button = QPushButton("Plot", self)
button.clicked.connect(self.on_button_click)

def on_button_click(self):
self.figure, axlist = plot(self)
canvas = FigureCanvas(self.figure)
layout = QVBoxLayout()
toolbar = NavigationToolbar(canvas)
layout.addWidget(canvas)
layout.addWidget(toolbar)
widget = QWidget()

widget.setLayout(layout)
self.setCentralWidget(widget)

def plot(self):
idf = pd.read_csv('examples/data/SPY_20110701_20120630_Bollinger.csv',index_col=0,parse_dates=True)
df = idf.loc['2011-07-01':'2011-12-30',:]
fig, axlist = mpl.plot(
df,
returnfig= True,
tight_layout= True,
figsize =(4,4),
style = 'yahoo',
type = 'candle',
scale_padding=0.25,
)
axlist[0].xaxis.set_tick_params(labelsize=5)
axlist[0].yaxis.set_tick_params(labelsize=5)
return fig, axlist[0]


if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())





52 changes: 52 additions & 0 deletions examples/gui_examples/PyQt5/ui.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'uiAHaQBa.ui'
##
## Created by: Qt User Interface Compiler version 6.4.3
##
## 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, QPushButton,
QSizePolicy, QStatusBar, QWidget)

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(786, 366)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.widget = QWidget(self.centralwidget)
self.widget.setObjectName(u"widget")
self.widget.setGeometry(QRect(10, 0, 541, 341))
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setObjectName(u"pushButton")
self.pushButton.setGeometry(QRect(620, 140, 75, 24))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 786, 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))
self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None))
# retranslateUi

14 changes: 14 additions & 0 deletions examples/gui_examples/PyQt6/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import sys
# Import 'QApplication' from PyQt6 For Create Empty App With PyQt6
from PyQt6.QtWidgets import QApplication
# gui is file Where We Creating GUI Component Such As Button And Layout
from gui import MainWindow

if __name__ == "__main__":
# sys.argv Created App Will Recieved Mouse and Keep Board Inputs
app = QApplication(sys.argv)
# Create Main Window of App
window = MainWindow()
# Show Main Window of App
window.show()
sys.exit(app.exec())
30 changes: 30 additions & 0 deletions examples/gui_examples/PyQt6/gui.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# import UI `ui_main_window` From QT Designer Call UI_MainWindow
from ui_main_window import Ui_MainWindow
# import PyQt6 > QtWidgets > QMainWindow
from PyQt6.QtWidgets import QMainWindow
# import plot_signal.py Where We Working Qthread, mplfinance, mataplotlib
import plot_signal


class MainWindow(QMainWindow):
def __init__(self,*args,):
super(MainWindow, self).__init__(*args,)
# imported UI set as self.ui
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Title Set
self.setWindowTitle("PySide6 Mplfinance Example")
#UI Button Linked to Function chart_plot_im
self.ui.plot.clicked.connect(self.chart_plot_im)

def chart_plot_im(self):
# Use of Qthread plot_signal.py
self.temp_thread = plot_signal.ChartThread(self)
# Signal Generated From Qthread Send To UI part with function handleFigureReady
self.temp_thread.figureReady.connect(self.handleFigureReady)
self.temp_thread.start()

def handleFigureReady(self, figure):
plot_signal.ChartWidget.updateChart(self,figure)


61 changes: 61 additions & 0 deletions examples/gui_examples/PyQt6/plot_signal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
from PyQt6.QtWidgets import QWidget

from PyQt6.QtCore import QThread, pyqtSignal
import matplotlib
matplotlib.use('Qt5Agg')
from matplotlib.backends.backend_qt5agg import ( FigureCanvasQTAgg as FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
import mplfinance as mpl
import pandas as pd


class ChartWidget(QWidget):
def __init__(self,main_window,item):
super().__init__()
#Main Window Assign
self.main_window = main_window

def updateChart(self,figure_in):
# Generating Canvas Which Hold Our Plot
self.canvas = FigureCanvas(figure_in)
# Generating Matplot toolbar
toolbar = NavigationToolbar(self.canvas)
# Seting Canvas TO Layout
self.ui.horizontalLayout.addWidget(self.canvas)
# Seting Toolbar To Layout
#self.ui.horizontalLayout.addWidget(toolbar)
self.canvas.draw()



class ChartThread(QThread):
# Major Difference PySide6 and PyQt6 is pyqtsignal and signal
figureReady = pyqtSignal(object)
_name = ''

def __init__(self,main_window):
super().__init__()
self.main_window = main_window

def run(self):
#Figure Return Here
self.figure, self.ax = plot(self.main_window)
# Figure Sending To Main Window With Signal
self.figureReady.emit(self.figure)


def plot(self):
# OHLCV Data
idf = pd.read_csv('examples/data/SPY_20110701_20120630_Bollinger.csv',index_col=0,parse_dates=True)
df = idf.loc['2011-07-01':'2011-12-30',:]
fig, axlist = mpl.plot(
df,
returnfig= True,
tight_layout= True,
figsize =(4,4),
style = 'yahoo',
type = 'candle',
scale_padding=0.25,
)
axlist[0].xaxis.set_tick_params(labelsize=5)
axlist[0].yaxis.set_tick_params(labelsize=5)
return fig, axlist[0]
45 changes: 45 additions & 0 deletions examples/gui_examples/PyQt6/ui_main_window.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-

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

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

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(724, 472)

self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.horizontalLayoutWidget = QWidget(self.centralwidget)
self.horizontalLayoutWidget.setObjectName(u"horizontalLayoutWidget")
self.horizontalLayoutWidget.setGeometry(QRect(9, 9, 571, 461))
self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.plot = QPushButton(self.centralwidget)
self.plot.setObjectName(u"plot")
self.plot.setGeometry(QRect(610, 220, 75, 24))
MainWindow.setCentralWidget(self.centralwidget)

def retranslateUi(self, MainWindow):

self.plot.setText(QCoreApplication.translate("MainWindow", u"plot", None))
# retranslateUi

14 changes: 14 additions & 0 deletions examples/gui_examples/Pyside 6/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import sys
# Import 'QApplication' from PySide 6 For Create Empty App With PySide6
from PySide6.QtWidgets import QApplication
# gui is file Where We Creating GUI Component Such As Button And Layout
from gui import MainWindow

if __name__ == "__main__":
# sys.argv Created App Will Recieved Mouse and Keep Board Inputs
app = QApplication(sys.argv)
# Create Main Window of App
window = MainWindow()
# Show Main Window of App
window.show()
sys.exit(app.exec())
30 changes: 30 additions & 0 deletions examples/gui_examples/Pyside 6/gui.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# import UI `ui_main_window` From QT Designer Call UI_MainWindow
from ui_main_window import Ui_MainWindow
# import Pyside6 > QtWidgets > QMainWindow
from PySide6.QtWidgets import QMainWindow
# import plot_signal.py Where We Working Qthread, mplfinance, mataplotlib
import plot_signal


class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# imported UI set as self.ui
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Title Set
self.setWindowTitle("PySide6 Mplfinance Example")
#UI Button Linked to Function chart_plot_im
self.ui.plot.clicked.connect(self.chart_plot_im)

def chart_plot_im(self):
# Use of Qthread plot_signal.py
self.temp_thread = plot_signal.ChartThread(self)
# Signal Generated From Qthread Send To UI part with function handleFigureReady
self.temp_thread.figureReady.connect(self.handleFigureReady)
self.temp_thread.start()

def handleFigureReady(self, figure):
plot_signal.ChartWidget.updateChart(self,figure)


65 changes: 65 additions & 0 deletions examples/gui_examples/Pyside 6/main_window - Copy.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>697</width>
<height>447</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Market Insight</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QPushButton" name="plot">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>115</width>
<height>24</height>
</size>
</property>
<property name="text">
<string>plot</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>
Loading