更改组合框选项以修改图形/图表 [英] Change combobox option to modificate graphic/chart

查看:35
本文介绍了更改组合框选项以修改图形/图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 PyQt5 构建用户界面以显示来自curve_fit"的数据.方法.

I'm using PyQt5 to build up a user interface to show up data from "curve_fit" method.

由于我正在处理的数据可能具有不连续性,因此我从方法中获得的收益将划分为曲线切片.

As the data which I'm working can have discontinuities, my return from the method is divided on curve slices.

我的GUI由两个图形和一个组合框组成.组合框的功能是使用户能够选择图表将显示的切片.虽然组合框的事件起作用了,但我的图表还是一样,没有任何修改.

My GUI is composed by two graphs and one combo box. The function of the combo box is to enable the user to choose which slice the chart will show. Although the event of the combo box is working, my charts still the same, without any modification.

main.py

import sys
from PyQt5 import QtWidgets
import numpy as np

from mainwindow import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self,
                 initial_curve_x_value, initial_curve_y_value,
                 fit_curve_x_value_list, fit_curve_y_value_list,
                 fit_curve_error_value_list, fit_curve_zero_list,
                 fit_parameter_list, fit_square_R_list,
                 parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.initial_curve_x_value = initial_curve_x_value
        self.initial_curve_y_value = initial_curve_y_value
        self.fit_curve_x_value_list = fit_curve_x_value_list
        self.fit_curve_y_value_list = fit_curve_y_value_list
        self.fit_curve_error_value_list = fit_curve_error_value_list
        self.fit_curve_zero_list = fit_curve_zero_list
        self.fit_parameter_list = fit_parameter_list
        self.fit_square_R_list = fit_square_R_list

        rangecombobox = len(fit_square_R_list)
        itenscombobox = ["Slice " + str(i+1) for i in range(rangecombobox)]
        self.combobox.addItems(itenscombobox)
        #setting as initial value in chart as the first slice
        initial = 0
        x_test = self.initial_curve_x_value[initial]
        y_test = self.initial_curve_y_value[initial]
        x2_test = self.fit_curve_x_value_list[initial]
        y2_test = self.fit_curve_y_value_list[initial]
        error_y = self.fit_curve_error_value_list[initial]
        zero_y = self.fit_curve_zero_list[initial]

        self.static_ax1.plot(x_test, y_test)
        self.static_ax1.plot(x2_test, y2_test)

        self.static_ax2.plot(x2_test, error_y)
        self.static_ax2.plot(x2_test, zero_y)

        self.combobox.currentIndexChanged.connect(self.changePlot)

    def changePlot(self):
        combobox_index = self.combobox.currentIndex()

        self.static_ax1.clear()
        self.static_ax2.clear()

        #updating the values
        x_test = self.initial_curve_x_value[combobox_index]
        y_test = self.initial_curve_y_value[combobox_index]
        x2_test = self.fit_curve_x_value_list[combobox_index]
        y2_test = self.fit_curve_y_value_list[combobox_index]
        error_y = self.fit_curve_error_value_list[combobox_index]
        zero_y = self.fit_curve_zero_list[combobox_index]

        #updating the charts
        self.static_ax1.plot(x_test, y_test)
        self.static_ax1.plot(x2_test, y2_test)

        self.static_ax2.plot(x2_test, error_y)
        self.static_ax2.plot(x2_test, zero_y)

x1_1 = [i for i in range(10)]
x1_1 = np.array(x1_1)
x1_2 = [i for i in range(10, 20,1)]
x1_2 = np.array(x1_2)


y1_1 = [i for i in range(10, 20,1)]
y1_1 = np.array(y1_1)
y1_2 = [i for i in range(20, 30,1)]
y1_2 = np.array(y1_2)
y1_3 = [i for i in range(30, 40,1)]
y1_3 = np.array(y1_3)
y1_4 = [i for i in range(40, 50,1)]
y1_4 = np.array(y1_4)
y1_5 = [i for i in range(20, 30,1)]
y1_5 = np.array(y1_5)
y1_6 = [i for i in range(30, 40,1)]
y1_6 = np.array(y1_6)

initial_curve_x_value = []
initial_curve_x_value.append(x1_1)
initial_curve_x_value.append(x1_2)

initial_curve_y_value = []
initial_curve_y_value.append(y1_1)
initial_curve_y_value.append(y1_2)

fit_curve_x_value_list = []
fit_curve_x_value_list.append(x1_1)
fit_curve_x_value_list.append(x1_2)

fit_curve_y_value_list = []
fit_curve_y_value_list.append(y1_3)
fit_curve_y_value_list.append(y1_4)

fit_curve_error_value_list = []
fit_curve_error_value_list.append(y1_5)
fit_curve_error_value_list.append(y1_6)

fit_curve_zero_list = []
zero = np.zeros(10)
fit_curve_zero_list.append(zero)
fit_curve_zero_list.append(zero)

fit_parameter_list = [[1, 2, 4], [2,3]]
fit_square_R_list = [0.99, 0.98]

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mw = MainWindow(initial_curve_x_value, initial_curve_y_value,
                    fit_curve_x_value_list, fit_curve_y_value_list,
                    fit_curve_error_value_list, fit_curve_zero_list,
                    fit_parameter_list, fit_square_R_list
                    )
    mw.show()
    sys.exit(app.exec_())

mainwindow.py

mainwindow.py

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QLabel, QComboBox
from PyQt5.QtCore import QRect

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        length_window = 1200
        height_window = 1200
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(length_window, height_window)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.combobox = QComboBox(MainWindow)
        self.combobox.setGeometry(QRect(900, 80, 250, 40))

        self.chart1 = QtWidgets.QWidget(MainWindow)
        self.chart1.setGeometry(QRect(50, 50, 800, 400))
        self.layout_chart1 = QtWidgets.QVBoxLayout(self.chart1)
        self.static_canvas1 = FigureCanvasQTAgg(Figure(figsize=(8,4)))
        self.layout_chart1.addWidget(self.static_canvas1)

        self.chart2 = QtWidgets.QWidget(MainWindow)
        self.chart2.setGeometry(QRect(50, 450, 800, 400))
        self.layout_chart2 = QtWidgets.QVBoxLayout(self.chart2)
        self.static_canvas2 = FigureCanvasQTAgg(Figure(figsize=(8,4)))
        self.layout_chart2.addWidget(self.static_canvas2)

        self.static_ax1 = self.static_canvas1.figure.subplots()
        self.static_ax2 = self.static_canvas2.figure.subplots()

推荐答案

您必须使用画布的 draw()方法来更新绘画:

You have to use the draw() method of the canvas to update the painting:

def changePlot(self):
    # ...

    self.static_ax2.plot(x2_test, error_y)
    self.static_ax2.plot(x2_test, zero_y)

    self.static_canvas1.draw()
    self.static_canvas2.draw()

这篇关于更改组合框选项以修改图形/图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆