가장 어려웠던 부분이다.
matplotlib 을 이용하여 그래프를 그리고
plt.show() 등을 이용하면 내가 만든 GUI 창이 아니고 추가적인 창에 그래프가 그려진다.
나는 GUI 안에서 그래프를 보고 싶은데!!
그래프를 넣고 싶은 부분에 widget를 그려준다.
objectName 은 graph_viewer 로 지정하기로 한다. (하고 싶은 이름 하면 된다.)
그 다음 위젯에서 오른쪽 클릭을 하여
다음으로 승격을 눌러준다.
그러면 아래와 같은 창을 만날 수 있다.
그 다음 승격된 클래스 이름과 헤대 파일을 위와 같이 입력해 준다.
from PyQt5.QtWidgets import*
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class matplotlibWidget(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self, parent)
self.canvas = FigureCanvas(Figure())
vertical_layout=QVBoxLayout()
vertical_layout.addWidget(self.canvas)
vertical_layout.setContentsMargins(1, 1, 1, 1)
self.canvas.axes=self.canvas.figure.add_subplot(111)
self.setLayout(vertical_layout)
그 다음 위와 같이 코드를 입력하고 matplotlibwidgetFile.py 로 저장!!
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5 import QtCore, QtGui, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
form_class = uic.loadUiType("~~~~.ui")[0]
class MyWindow(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
def show_graph(self):
#x_list, y_list, y_err, data_name에 대한 설정 코드
self.graph_viewer.canvas.axes.errorbar(x_list, y_list, yerr=y_err, label=data_name)
self.graph_viewer.canvas.axes.legend()
self.graph_viewer.canvas.axes.set_xlabel('~~~')
self.graph_viewer.canvas.axes.set_ylabel('~~~')
self.graph_viewer.canvas.draw()
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()
그 다음 main py 파일을 위와 같이 입력하면 완성~~
위의 파일은 errorbar라는 그래프를 그리는 내용이다. plot 등으로 바꾸면 된다.
.ui파일을 불러오고 def 로 함수를 설정해서 그래프를 그릴 수 있다.
정말~~ 어려웠다~~
def save(self):
pix=self.graph_viewer.grab()
filename=QFileDialog.getSaveFileName(self)[0]
pix.save(filename)
추가적으로 위와 같이 설정하면 그래프 저장도 할 수 있다!!!
저장 버튼을 만들고 슬롯 설정해서 save()를 만들었다.
그 다음 save()에 대한 코드 입력.
그냥 save만 이용하면
ex) pix.save("Graph")
py 파일이 있는 그 위치에 "Graph"라는 이름으로 저장이 된다.
하지만 QFileDialog.getSaveFileName()을 이용하면 내가 원하는 위치에 원하는 이름으로 저장할 수 있다.
주의할 점은!! 마지막에 확장자까지 적어줘야 한다는 점!!
만약에 확장자를 매번 적기 귀찮고 하나의 확장자로 통일하려고 한다면
pix.save(filename+'.png') 처럼 확장자를 포함하는 내용을 추가해주면 된다.
graph_viewer 대신 다른 위젯 objectName을 넣으면 그 위젯만 이미지파일로 지정할 수 있음.
윈도우 전체를 캡쳐할 수 도 있다.
아 할 때는 정말 힘들었는데 정리하니까 쉽네.
역시 초보자는 힘들다.
'IT > Python' 카테고리의 다른 글
파이썬으로 signal processing (scipy.signal) (0) | 2020.04.16 |
---|---|
[파이썬 python] Butterworth filter / low pass filter / signal data filtering (0) | 2020.04.15 |
PyQt5로 파이썬 GUI 만들기 / python GUI (4) 시그널/슬롯 (0) | 2020.03.27 |
PyQt5로 파이썬 GUI 만들기 / python GUI (3) py 코드와 연결하기 (0) | 2020.03.26 |
PyQt5로 파이썬 GUI 만들기 / python GUI (2) Qt designer 사용하기 /pyuic5 ui파일 변환 /pyrcc5 리소스파일 변환 (1) | 2020.03.25 |
댓글