前提・実現したいこと
PyQt5を使用して座標をプロットしてみたいと思っております。CSVファイルに格納された値を取り出し、それを座標として点々を打っていくイメージです。例えば、A列の値をX座標、B列の値をY座標とするような感じです。
PyQt5でCSVファイルをインポートし、Pandasで値を読み取り、プロットした結果をウィンドウに表示したいです。
発生している問題・エラーメッセージ
ウィジェットとして作成した表示領域の上に、どのように座標をプロットしていくのかがわかりません。
以下のコードですと、表示領域とボタンは表示できているのですが、罫線が表示されません。
また、CsvPlotterの中でreadCsv()関数を定義しPandasを使用しようとしているのですが、ここで使用すると、MapPlotの方でプロットする点を生成できなくなるような気もしています。一方で、CsvPlotterの方では、ファイルをインポートするためにreadCsv()関数を定義する必要があるようにも思い、どうしたらいいのかわかりません。
該当のソースコード
Python
1# - * - coding: utf-8 - * - 2 3import sys 4 5import pandas as pd 6 7from PyQt5.QtWidgets import * 8from PyQt5.QtGui import * 9from PyQt5.QtCore import * 10 11class CsvPlotter(QMainWindow): 12 def __init__(self): 13 super().__init__() 14 self.initUI() 15 16 def initUI(self): 17 18 maxWidth = self.maximumWidth() 19 maxHeight = self.maximumHeight() 20 21 self.setLayout() 22 self.statusBar() 23 24 self.setGeometry(0, 0, maxWidth, maxHeight) 25 self.setWindowTitle('Csv Plotter') 26 27 self.show() 28 29 def setLayout(self): 30 31 exitAction = QAction('&exit', self) 32 exitAction.setShortcut('Ctrl+Q') 33 exitAction.setStatusTip('Exit Application.') 34 exitAction.triggered.connect(qApp.quit) 35 36 readCsvAction = QAction('&Open CSV', self) 37 readCsvAction.setStatusTip('Open CSV File.') 38 readCsvAction.triggered.connect(self.readCsv) 39 40 menubar = self.menuBar() 41 fileMenu = menubar.addMenu('&File') 42 fileMenu.addAction(exitAction) 43 fileMenu.addAction(readCsvAction) 44 45 self.w = QWidget() 46 47 self.paint_area = QGraphicsView() 48 scene = QGraphicsScene(self.paint_area) 49 srect = self.paint_area.rect() 50 width = srect.width() 51 height = srect.height() 52 53 self.open_file_button = QPushButton('Open File', self) 54 self.open_file_button.clicked.connect(self.readCsv) 55 56 w_layout = QGridLayout() 57 58 w_layout.addWidget(self.paint_area, 0, 0, 36, 3) 59 60 w_layout.addWidget(self.open_file_button, 1, 11, 1,1) 61 self.w.setLayout(main_pane) 62 self.setCentralWidget(self.w) 63 64 65 def readCsv(self): 66 path = QFileDialog.getOpenFileName(self, 'Open a file.','~') 67 self.df = pd.read_csv(path, header=None) 68 69class MapPlot(QGraphicsItem): 70 71 def __init__(self, width=400, height=400): 72 super(MapPlot, self).__init__() 73 74 self.width = width 75 self.height = height 76 self.x_origin = width * 1 / 2 77 self.y_origin = height * 1 / 2 78 79 def paint(self, painter, option, widget): 80 painter.setPen(Qt.gray) 81 painter.drawLine(0, self.y_origin, self.width, self.y_origin) 82 painter.drawLine(self.x_origin, 0, self.x_origin, self.height) 83 84def main(): 85 app = QApplication(sys.argv) 86 gui = CsvPlotter() 87 sys.exit(app.exec_()) 88 89if __name__ == '__main__': 90 main()
質問自体がわかりにくいかと思いますが、ご助言いただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/12 03:07
2018/09/12 03:24
2018/09/12 03:31