Как сделать настраиваемые диапазоны у графика?
Как можно реализовать настройку диапазона по оси X задавая ограничения через QPlainTextEdit?
main.py:
import sys
import random
from PyQt5 import QtCore, QtGui, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar # +++
from matplotlib.figure import Figure
from Ui_unt import Ui_MainWindow
class MplCanvas(FigureCanvas):
def __init__(self, *args, **kwargs):
self.fig = Figure()
super(MplCanvas, self).__init__(self.fig, *args, **kwargs)
def plot(self, x, y):
self.fig.clear()
self.ax = self.fig.add_subplot(111)
self.ax.plot(x, y)
# self.ax.set_xlim(xmin=0)
# self.ax.set_xlim(xmax=100)
self.ax.grid(True)
self.draw()
def _clear(self):
self.fig.clear()
self.draw()
class TEST(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(TEST, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self._plot)
self.pushButton_2.clicked.connect(self.button_clear)
self.canavas = MplCanvas()
self.canavas.setMinimumSize(300, 300)
self.toolbar = NavigationToolbar(self.canavas, self)
self.verticalLayout.addWidget(self.canavas)
self.verticalLayout.addWidget(self.toolbar)
self.toolbar.hide()
def _plot(self):
x = [random.randrange(1, 100) for _ in range(10)]
y = [random.randrange(1, 100) for _ in range(10)]
self.canavas.plot(x, y)
self.toolbar.show()
self.plainTextEdit.toPlainText()
self.plainTextEdit_2.toPlainText()
def button_clear(self):
self.canavas._clear()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ui = TEST()
ui.show()
sys.exit(app.exec_())
Ui_unt.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(249, 332)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setObjectName("plainTextEdit")
self.horizontalLayout.addWidget(self.plainTextEdit)
self.plainTextEdit_2 = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit_2.setObjectName("plainTextEdit_2")
self.horizontalLayout.addWidget(self.plainTextEdit_2)
self.verticalLayout.addLayout(self.horizontalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 249, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
self.plainTextEdit.setPlainText(_translate("MainWindow", "0"))
self.plainTextEdit_2.setPlainText(_translate("MainWindow", "100"))
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Обратите внимание, что для этих целей, правильно использовать виджет QSpinBox, который предоставляет виджет счетчика.
import sys
import random
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar # +++
from matplotlib.figure import Figure
#from Ui_unt import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(249, 332)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
'''
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setObjectName("plainTextEdit")
self.horizontalLayout.addWidget(self.plainTextEdit)
'''
# !!! +++
self.spinbox = QtWidgets.QSpinBox(self.centralwidget)
self.spinbox.setObjectName("spinbox")
self.horizontalLayout.addWidget(self.spinbox)
'''
self.plainTextEdit_2 = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit_2.setObjectName("plainTextEdit_2")
self.horizontalLayout.addWidget(self.plainTextEdit_2)
'''
# !!! +++
self.spinbox_2 = QtWidgets.QSpinBox(self.centralwidget)
self.spinbox_2.setObjectName("spinbox_2")
self.horizontalLayout.addWidget(self.spinbox_2)
self.verticalLayout.addLayout(self.horizontalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 249, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
# self.plainTextEdit.setPlainText(_translate("MainWindow", "0"))
# self.plainTextEdit_2.setPlainText(_translate("MainWindow", "100"))
class MplCanvas(FigureCanvas):
def __init__(self, *args, **kwargs):
self.fig = Figure()
super(MplCanvas, self).__init__(self.fig, *args, **kwargs)
def plot(self, x, y):
self.fig.clear()
self.ax = self.fig.add_subplot(111)
self.ax.plot(x, y)
# self.ax.set_xlim(xmin=0)
# self.ax.set_xlim(xmax=100)
self.ax.grid(True)
self.draw()
def _clear(self):
self.fig.clear()
self.draw()
class TEST(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(TEST, self).__init__()
self.setupUi(self)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.spinbox.setRange(0, 10)
self.spinbox.setValue(5)
self.spinbox_2.setRange(20, 120)
self.spinbox_2.setValue(77)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.pushButton.clicked.connect(self._plot)
self.pushButton_2.clicked.connect(self.button_clear)
self.canavas = MplCanvas()
self.canavas.setMinimumSize(300, 300)
self.toolbar = NavigationToolbar(self.canavas, self)
self.verticalLayout.addWidget(self.canavas)
self.verticalLayout.addWidget(self.toolbar)
self.toolbar.hide()
def _plot(self):
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
minimum = self.spinbox.value()
maximum = self.spinbox_2.value()
# x = [random.randrange(1, 100) for _ in range(10)]
x = [random.randrange(minimum, maximum) for _ in range(10)]
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
y = [random.randrange(1, 100) for _ in range(10)]
self.canavas.plot(x, y)
self.toolbar.show()
# self.plainTextEdit.toPlainText()
# self.plainTextEdit_2.toPlainText()
def button_clear(self):
self.canavas._clear()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ui = TEST()
ui.show()
sys.exit(app.exec_())
