環境
Windows 10 Pro(CPU only) Python 3.7.5
まずは最小画面の描画
- バージョン
PyQt5==5.13.2 PyQt5-sip==12.7.0
- コード
import sys from PyQt5 import QtCore from PyQt5.QtWidgets import * class Window(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("pyQt5 sample") self.setGeometry(50, 50, 660, 660) self.button1 = QPushButton('Open Img', self) self.button1.setGeometry(QtCore.QRect(20, 20, 100, 30)) self.img_label1 = QLabel(self) self.img_label1.setGeometry(QtCore.QRect(74, 120, 512, 512)) self.img_label1.setFrameStyle(QFrame.Box | QFrame.Plain) if __name__ == "__main__": app = QApplication(sys.argv) ex =Window() ex.show() sys.exit(app.exec_())
- 結果
つぎにボタンを押したときの動作を定義する(画像表示)
- ボタンを押すとファイル選択画面が開く
- ファイルを選択すると画面に表示する
- 追加するコード
from PyQt5.QtGui import QImage, QPixmap
self.button1.clicked.connect(self.showDialog1)
def showDialog1(self): fname = QFileDialog.getOpenFileName(self, 'Open file') # fname[0]は選択したファイルのパス(ファイル名を含む) if fname[0]: # 画像の読み込み, サイズ変更 image = QImage(fname[0]).scaled(512,512,QtCore.Qt.KeepAspectRatio) # 画像の表示 self.img_label1.setPixmap(QPixmap.fromImage(image))
- 最終的なコード
import sys from PyQt5 import QtCore from PyQt5.QtWidgets import * from PyQt5.QtGui import QImage, QPixmap class Window(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("pyQt5 sample") self.setGeometry(50, 50, 660, 660) self.button1 = QPushButton('Open Img', self) self.button1.setGeometry(QtCore.QRect(20, 20, 100, 30)) self.img_label1 = QLabel(self) self.img_label1.setGeometry(QtCore.QRect(74, 120, 512, 512)) self.img_label1.setFrameStyle(QFrame.Box | QFrame.Plain) self.button1.clicked.connect(self.showDialog1) def showDialog1(self): fname = QFileDialog.getOpenFileName(self, 'Open file') # fname[0]は選択したファイルのパス(ファイル名を含む) if fname[0]: # 画像の読み込み, サイズ変更 image = QImage(fname[0]).scaled(512,512,QtCore.Qt.KeepAspectRatio) # 画像の表示 self.img_label1.setPixmap(QPixmap.fromImage(image)) if __name__ == "__main__": app = QApplication(sys.argv) ex =Window() ex.show() sys.exit(app.exec_())
matplotlibのグラフを表示させる
- バージョン
cycler==0.10.0 kiwisolver==1.1.0 matplotlib==3.1.1 numpy==1.17.4 pyparsing==2.4.5 PyQt5==5.13.2 PyQt5-sip==12.7.0 python-dateutil==2.8.1 six==1.13.0
- 最終コード
import sys from PyQt5 import QtCore from PyQt5.QtWidgets import * from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib import pyplot as plt import numpy as np class Window(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("pyQt5 sample") self.setGeometry(50, 50, 660, 660) self.button1 = QPushButton('Open Img', self) self.button1.setGeometry(QtCore.QRect(20, 20, 100, 30)) self.FigureWidget = QWidget(self) self.FigureWidget.setGeometry(QtCore.QRect(74, 120, 512, 512)) self.FigureLayout = QVBoxLayout(self.FigureWidget) self.figure = plt.figure() self.axes = self.figure.add_subplot(111) self.axes.axis('off') self.canvas = FigureCanvas(self.figure) self.FigureLayout.addWidget(self.canvas) self.button1.clicked.connect(self.plot) def plot(self): x1=np.arange(0, 4*np.pi, 0.1) y1=np.sin(x1) self.axes.plot(x1,y1,c='r') self.axes.axis('on') self.canvas.draw() if __name__ == "__main__": app = QApplication(sys.argv) ex =Window() ex.show() sys.exit(app.exec_())
- グラフが二つになってもほぼ同様
import sys from PyQt5 import QtCore from PyQt5.QtWidgets import * from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib import pyplot as plt import numpy as np class Window(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("pyQt5 sample") self.setGeometry(50, 50, 660, 660) self.button1 = QPushButton('Open Img', self) self.button1.setGeometry(QtCore.QRect(20, 20, 100, 30)) self.FigureWidget = QWidget(self) self.FigureWidget.setGeometry(QtCore.QRect(74, 120, 512, 512)) self.FigureLayout = QVBoxLayout(self.FigureWidget) self.figure = plt.figure() self.axes1 = self.figure.add_subplot(211) self.axes1.axis('off') self.axes2 = self.figure.add_subplot(212) self.axes2.axis('off') self.canvas = FigureCanvas(self.figure) self.FigureLayout.addWidget(self.canvas) self.button1.clicked.connect(self.plot) def plot(self): x1=np.arange(0, 4*np.pi, 0.1) y1=np.sin(x1) self.axes1.plot(x1,y1,c='r') self.axes1.axis('on') self.axes2.plot(x1,y1,c='r') self.axes2.axis('on') self.canvas.draw() if __name__ == "__main__": app = QApplication(sys.argv) ex =Window() ex.show() sys.exit(app.exec_())