Найти - Пользователи
Полная версия: ПРИВЕТ, НУЖНА ПОМОЩЬ С matplotlib python Уже давно ковыряюсь
Начало » Python для экспертов » ПРИВЕТ, НУЖНА ПОМОЩЬ С matplotlib python Уже давно ковыряюсь
1
dendonnar
Привет друзья, товарищи. Вот где-то недельку назад понадобилось сделать простую программу на python'е с использованием библиотеки matplotlib. Перехожу сразу к делу. Есть у меня окно, а чтобы наглядно было, я прикреплю скриншот. В верхнем правом углу есть окно ввода. Так вот, нужно сделать так, чтобы после ввода функции в окошко, график сам ее рисовал в соответствии с заданными значениями.

Код привожу ниже.

 import math
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QAction, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QSpacerItem, QSizePolicy, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import mplcyberpunk
import random
plt.style.use("cyberpunk")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import numpy as np
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.title = 'Moja appka'
        self.left = 10
        self.top = 10
        self.width = 1920
        self.height = 1080
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.statusBar().showMessage('Ready')
        mainMenu = self.menuBar()
        mainMenu.setNativeMenuBar(False)
        fileMenu = mainMenu.addMenu('Plik')
        helpMenu = mainMenu.addMenu('Pomoc')
        self.move(150,150)
        exitButton = QAction(QIcon('exit24.png'), 'Exit', self)
        exitButton.setShortcut('Ctrl+Q')
        exitButton.setStatusTip('Wyjsc z programu')
        exitButton.triggered.connect(self.close)
        fileMenu.addAction(exitButton)
        widget =  QWidget(self)
        self.setCentralWidget(widget)
        vlay = QVBoxLayout(widget)
        hlay = QHBoxLayout()
        vlay.addLayout(hlay)
        self.nameLabel = QLabel('Nazwa:', self)
        self.line = QLineEdit(self)
        self.nameLabel2 = QLabel('Wynik', self)
        hlay.addWidget(self.nameLabel)
        hlay.addWidget(self.line)
        hlay.addWidget(self.nameLabel2)
        hlay.addItem(QSpacerItem(1000, 10, QSizePolicy.Expanding))
        pybutton = QPushButton('Wcisnij mnie:)', self)
        pybutton.clicked.connect(self.clickMethod)
        hlay2 = QHBoxLayout()
        hlay2.addWidget(pybutton)
        hlay2.addItem(QSpacerItem(1000, 10, QSizePolicy.Expanding))
        vlay.addLayout(hlay2)
        m = WidgetPlot(self)
        vlay.addWidget(m)
    def clickMethod(self):#вот здесь я и хочу это все мероприятие обрабатывать
        print('Clicked Pyqt button.')
        if self.line.text() == 'sin(1)':
            self.statusBar().showMessage('Not a Number')
   
        else:
            print('Number: {}'.format(float(self.line.text())*2))
            self.statusBar().showMessage('Introduction of a number')
            self.nameLabel2.setText(str(float(self.line.text())*2))
class WidgetPlot(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        self.setLayout(QVBoxLayout())
        self.canvas = PlotCanvas(self, width=10, height=8)
        self.toolbar = NavigationToolbar(self.canvas, self)
        self.layout().addWidget(self.toolbar)
        #self.toolbar.configure_subplots()
        self.layout().addWidget(self.canvas)
class PlotCanvas(FigureCanvas):
    def __init__(self, parent=None, width=10, height=8, dpi=150):
        fig = Figure(figsize=(width, height), dpi=dpi)
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)
        FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)
        self.plot()
    def plot(self):
        ax = self.figure.add_subplot(111)
        ax.set_title('Joanna Bihun',fontsize=14)
        ax.spines['left'].set_position('center')
        ax.spines['bottom'].set_position('center')
        ax.spines['right'].set_color('none')
        ax.spines['top'].set_color('none')
        ax.xaxis.set_ticks_position('bottom')
        ax.yaxis.set_ticks_position('left')
        x = np.arange(0, 10, 0.1)
        y = np.sin(x)
        z = np.cos(x)
        ax.plot(x, np.sin(y), '-', label='Sin(x)')
        ax.plot(x, np.cos(z), '-', label='Cos(x)')
        ax.legend(framealpha=1, fontsize=13, frameon=True);
        mplcyberpunk.make_lines_glow(ax)
        mplcyberpunk.add_underglow(ax)
        plt.style.use("dark_background")
        #mplcyberpunk.add_glow_effects(ax)
        self.draw()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_())

Буду оверблагодарен за помощь



dendonnar
Если кто в силах сделать что-то вроде
 if self.line.text() == 'sin(1)':
рисуем синус sin(1)
Master_Sergius
А в чем проблема? Сделайте функцию, которая будет рисовать “sin(x)”, “cos(x)” и что там еще надо, а дальше вводимую строку можно парсить хоть руками, хоть регекспами, а хоть ast или еще чего-нибудь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB