# Excel dosyasını yükleyip grafik elde etmek.
import sys
import matplotlib
matplotlib.use("Qt5Agg")
import pandas as pd
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg,
NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
from collections import Counter
from functools import partial
import warnings
class help_(QWidget):
    def __init__(self):
        super().__init__()
        self.textEdit = QLabel('Excel dosyası ekleyiniz.\n'
                               'Cikis yapmak icin exit tiklayiniz.')
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.textEdit)
        self.setLayout(self.layout)
        self.setWindowTitle('Help Window')
        self.setGeometry(350,200,200,100)
class MplCanvas(FigureCanvasQTAgg):
    def __init__(self, parent=None, width=5, height=4, dpi=100) -> object:
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        super(MplCanvas, self).__init__(fig)
class analiz(QMainWindow):
    def __init__(self):
        super(analiz, self).__init__()
        self._createAction()
        self._cretaMenuBar()
        self._connectActions()
    def _cretaMenuBar(self):
        self.setWindowTitle("Loads Excel")
        self.setGeometry(200,190,770, 598)
        menuBar = self.menuBar()
        fileMenu = QMenu("&File", self)
        fileMenu.addAction(self.newAction)
        fileMenu.addAction(self.openAction)
        fileMenu.addAction(self.saveAction)
        fileMenu.addSeparator()
        fileMenu.addAction(self.exitAction)
        menuBar.addMenu(fileMenu)
        editMenu = menuBar.addMenu("&Edit")
        editMenu.addAction(self.copyAction)
        editMenu.addAction(self.pasteAction)
        editMenu.addAction(self.cutAction)
        editMenu.addSeparator()
        findMenu = editMenu.addMenu("Find and Replace")
        findMenu.addAction("Find...")
        findMenu.addAction("Replace...")
        graphMenu = menuBar.addMenu("Graph")
        graphMenu.addAction(self.graphMenuAction)
        helpMenu = menuBar.addMenu("&Help")
        helpMenu.addAction(self.aboutAction)
        self.openRecentMenu = fileMenu.addMenu("Open Recent")
        self.show()
    def _createAction(self):
        self.newAction = QAction("&New", self)
        self.openAction = QAction("&Open...", self)
        self.saveAction = QAction("&Save...", self)
        self.exitAction = QAction("&Exit...", self)
        self.copyAction = QAction("&Copy...", self)
        self.pasteAction = QAction("&Paste...", self)
        self.cutAction = QAction("&Cut...", self)
        self.aboutAction = QAction("&About...", self)
        self.newAction.setShortcut("Ctrl+N")
        self.openAction.setShortcut("Ctrl+O")
        self.saveAction.setShortcut("Ctrl+S")
        self.copyAction.setShortcut(QKeySequence.Copy)
        self.pasteAction.setShortcut(QKeySequence.Paste)
        self.copyAction.setShortcut(QKeySequence.Cut)
        self.graphMenuAction = QAction("Draw Graph", self)
    def _connectActions(self):
        self.newAction.triggered.connect(self.newFile)
        self.openAction.triggered.connect(self.openFile)
        self.saveAction.triggered.connect(self.saveFile)
        self.exitAction.triggered.connect(self.close)
        self.copyAction.triggered.connect(self.copyContent)
        self.pasteAction.triggered.connect(self.pasteContent)
        self.cutAction.triggered.connect(self.cutContent)
        self.aboutAction.triggered.connect(self.aboutContent)
        self.openRecentMenu.aboutToShow.connect(
        self.populateOpenRecent)
        self.graphMenuAction.triggered.connect(self.grafik)
    def newFile(self):
        self.centralWidget.setText("<b>File > New </b> Clicked")
    def openFile(self):
        # self.centralWidget.setText("<b>File > Open </b> Clicked")
        self.fname = QFileDialog.getOpenFileName(self, "Open File")
        self.file = ",".join(self.fname).split(",")[0].replace("/", "\\")
        # test = open(self.file, "r")
        # print(test)
        # with test:
        #     text = pd.read_excel(self.file)
        #     print(text)
    def saveFile(self):
        self.centralWidget.setText("<b>File > Save </b> Clicked")
    def copyContent(self):
        self.centralWidget.setText("<b>File > Copy </b> Clicked")
    def pasteContent(self):
        self.centralWidget.setText("<b>File > Paste </b> Clicked")
    def cutContent(self):
        self.centralWidget.setText("<b>File > Cut </b> Clicked")
    def aboutContent(self):
        # self.centralWidget.setText("<b>File > About </b> Clicked")
        self.w1 = help_()
        self.w1.show()
    def populateOpenRecent(self):
        self.openRecentMenu.clear()
        actions = []
        filenames = [f"File-{n}" for n in range(5)]
        for filename in filenames:
            action = QAction(filename, self)
            action.triggered.connect(partial(self.openRecentFile, filename))
            actions.append(action)
        self.openRecentMenu.addActions(actions)
    def grafik(self):
        with warnings.catch_warnings(record=True):
            warnings.simplefilter("always")
            self.df = pd.read_excel(self.file)
        text1, ok = QInputDialog.getText(self, 
        'X Coords Start position', 'Enter Row Number')
        text2, ok = QInputDialog.getText(self, 
        'X Coords Start position', 'Enter Column Number')
        # text3, ok = QInputDialog.getText(self, 
          'Y Coords Start position', 'Enter Column Number')
        # text4, ok = QInputDialog.getText(self, 
          'Y Coords Stop position', 'Enter Column Number')
        # text5, ok = QInputDialog.getText(self, 
          'Y Coords start position', 'Enter Row Number')
        ok = True
        if ok:
            self.sutun = int(text2)
            self.satir = int(text1)
            self.namesRow = self.df.iloc[self.satir:, self.sutun]
            # self.basSutun = int(text3)
            # self.bitSutun = int(text4)
            # self.basSatir = int(text5)
            # self.values = self.veri.iloc[self.basSatir:, 
              self.basSutun:self.bitSutun]
        x = Counter(self.namesRow)
        self.listt1 = []
        self.listt2 = []
        for value in set(self.namesRow):
            self.listt1.append(value)
            self.listt2.append(x[value])
        sc = MplCanvas(self, width=5, height=4, dpi=100)
        sc.axes.bar(self.listt1, self.listt2)
        # Grafikte degrleri yazmak için yapıldı.
        for i, txt in enumerate(self.listt2):
            sc.axes.annotate(txt, (self.listt1[i], self.listt2[i]))
        toolbar = NavigationToolbar(sc, self)
        layout = QVBoxLayout()
        layout.addWidget(toolbar)
        layout.addWidget(sc)
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)
        self.show()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = analiz()
    app.exec_()