更改组合框选项以修改图形/图表 [英] Change combobox option to modificate graphic/chart
问题描述
我正在使用 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屋!