In this PyQt5 tutorial, I will be covering how we can update a matplotlib graph using a QLineEdit widget.
Source Code
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QHBoxLayout, QVBoxLayout
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
import matplotlib
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Set Matplotlib Chart Value with QLineEdit Widget')
self.window_width, self.window_height = 1200, 800
self.setMinimumSize(self.window_width, self.window_height)
layout = QVBoxLayout()
self.setLayout(layout)
self.input = QLineEdit()
self.input.textChanged.connect(self.update_chart)
layout.addWidget(self.input)
self.canvas = FigureCanvas(plt.Figure(figsize=(15, 6)))
layout.addWidget(self.canvas)
self.insert_ax()
def insert_ax(self):
font = {
'weight': 'normal',
'size': 16
}
matplotlib.rc('font', **font)
self.ax = self.canvas.figure.subplots()
self.ax.set_ylim([0, 100])
self.ax.set_xlim([0, 1])
self.bar = None
def update_chart(self):
value = self.input.text()
try:
value = float(value)
except ValueError:
value = 0
x_position = [0.5]
if self.bar:
self.bar.remove()
self.bar = self.ax.bar(x_position, value, width=0.2, color='g')
self.canvas.draw()
if __name__ == '__main__':
# don't auto scale when drag app to a different monitor.
# QApplication.setAttribute(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
app = QApplication(sys.argv)
app.setStyleSheet('''
QWidget {
font-size: 30px;
}
''')
myApp = MyApp()
myApp.show()
try:
sys.exit(app.exec_())
except SystemExit:
print('Closing Window...')
