Exemple #1
0
class MyTable(QTableWidget):
    def __init__(self, r, headings, filename):
        super().__init__(r, len(headings))
        self.onFocusGainedText = ""
        self.headings = headings
        self.setColumnWidth(0, 70)
        self.setColumnWidth(1, 200)
        self.setColumnWidth(2, 200)
        self.setColumnWidth(3, 200)
        self.setColumnWidth(4, 70)
        self.setColumnWidth(5, 70)
        self.setColumnWidth(6, 70)
        self.setHorizontalHeaderLabels(headings)
        self.check_change = True
        self.cellChanged.connect(self.c_current)
        QEsFile = r"2020_Feb_QE.txt"
        handicapsFile = r"2020.csv"
        self.filename = filename
        handicaps = []
        self.PYdict = {}
        self.dinghyLst = []
        self.cols = dict()
        for h in headings:
            self.cols[h] = []

        for line in open(handicapsFile, "r").readlines():
            tokens = line.split(",")
            if tokens[0] != "" and len(tokens) > 3:
                self.dinghyLst.append(tokens[0])
                handicaps.append(tokens[0] + "," + tokens[1] + "," + tokens[2])
                self.PYdict[tokens[0]] = int(tokens[1])

        QEs = []

        for line in open(QEsFile, "r").readlines():
            QEs.append(QE(line, self.PYdict))
        self.race = Race([], QEs)
        self.race.handicaps = handicaps
        self.completerLsts = {"QE": [], "Class": [], "Code": []}
        for qe in QEs:
            self.completerLsts["QE"].append(qe.QE)
        for c in self.PYdict.keys():
            self.completerLsts["Class"].append(c)
        self.completerLsts["Code"] = ["DNF", "OCS", "DNC"]
        self.completers = dict()
        for k in self.completerLsts.keys():
            self.completers[k] = QCompleter(self.completerLsts[k])
            self.completers[k].setCaseSensitivity(QtCore.Qt.CaseInsensitive)
        people = set()

        for Q in QEs:
            people.add(Q.helm)
            people.add(Q.crew)
        self.peopleLst = list(people)
        self.show()

    def getCurrentCell(self):
        return self.cols[self.headings[self.currentColumn()]][
            self.currentRow()]

    def selectCell(self, row, col):
        if row >= 0 and row < self.rowCount(
        ) and col >= 0 and col < self.columnCount():
            self.cols[self.headings[col]][row - 1].setFocus()
            self.cols[self.headings[col]][row].onFocusGainedText = self.cols[
                self.headings[col]][row].text()

    def fooEnter(self):
        cell = self.getCurrentCell()
        print("Enter")
        cell.onFocusGainedText = cell.text()

    def fooUp(self):
        self.selectCell(self.currentRow() - 1, self.currentColumn())

    def fooDown(self):
        self.selectCell(self.currentRow() + 1, self.currentColumn())

    def fooLeft(self):
        self.selectCell(self.currentRow(), self.currentColumn() - 1)

    def fooRight(self):
        self.selectCell(self.currentRow(), self.currentColumn() + 1)

    def score(self):
        ZZ = 0
        self.race.entries = []
        for r in range(0, self.rowCount()):
            QEfound = False
            helm = self.cols["Helm"][r].text()
            crew = self.cols["Crew"][r].text()
            dinghy = self.cols["Class"][r].text().upper()
            try:
                laps = int(self.cols["Laps"][r].text())
                time = int(self.cols["Time"][r].text())
            except:
                laps = 0
                time = 0
            fincode = self.cols["Code"][r].text()
            if ((fincode != "") or
                (laps != 0 and time != 0)) and (dinghy in self.dinghyLst):
                for Q in self.race.QEs:
                    if (Q.helm.upper() == helm.upper()) and (Q.dinghy.upper()
                                                             == dinghy):
                        QEfound = True
                        qe = Q
                if QEfound == False:
                    print("ZZ: ", helm, dinghy)
                    py = 9999
                    if dinghy.upper() in self.PYdict.keys():
                        py = self.PYdict[dinghy]
                    else:
                        print("PY not found")
                    qe = tempQE("ZZ" + str(ZZ), helm, crew, py, dinghy)
                    ZZ += 1
                    self.race.QEs.append(qe)
                    print(qe, laps, time, fincode, 0)
                self.race.entries.append(raceEntry(qe, laps, time, fincode, 0))
            #else:
            #print("problem With Row",colsr[0].get(),r[1].get(),r[2].get(),r[3].get(),r[4].get(),r[5].get(),laps,time)
        self.race.save(self.filename + ".race")
        self.race.score(len(self.race.entries) + 1)
        html = """<html> 
        <head><style>
				th{
				font-size: 12px;
				border: 1px solid black;							
				text-align: center;
				padding: 2px;}
				table {border-collapse: collapse;}				
				table#PY tr:nth-child(odd) td{background-color: #f2f2f2;}
				table#personal tr:nth-child(even) td{background-color: #a2a2a2;}
				table#personal {float: left; }
				table#PY {float: left;}
				table#layout {width:100%}		
				td {
				text-align: center;
				font-size: 12px;
				border: 1px solid black;
				padding: 2px;
				}
				}
                </style></head>""" +\
        self.race.PYresult() + self.race.personalResult() + "</html>"
        open(self.filename + ".html", "w").write(html)
        #os.system("cp " + self.filename + ".html stewart")
        #os.system("cp " + self.filename + ".race stewart")
        os.system("firefox " + self.filename + ".html")

    def c_current(self):
        row = self.currentRow()
        col = self.currentColumn()
        h = self.headings

        value = self.cols[self.headings[col]][row].text()
        if self.headings[col] == "QE":
            for qe in self.race.QEs:
                if qe.QE == value.upper():
                    print(self.cols["QE"])
                    self.cols["QE"][row].setText(qe.QE)
                    self.cols["Helm"][row].setText(qe.helm)
                    self.cols["Crew"][row].setText(qe.crew)
                    self.cols["Class"][row].setText(qe.dinghy)
        elif self.headings[col] == "Class" or self.headings[col] == "Helm":
            self.cols[0][row].setText("")

    def addItem(self):
        h = self.headings
        row = self.rowCount()
        self.insertRow(row)
        for i in range(0, len(h)):
            le = MyLineEdit()
            le.returnPressed.connect(self.fooEnter)
            self.cols[h[i]].append(le)
            if h[i] in self.completers.keys():
                self.cols[h[i]][-1].setCompleter(self.completers[h[i]])
            self.setCellWidget(row, i, self.cols[h[i]][-1])
            self.cols[h[i]][-1].textChanged.connect(self.c_current)

    def open_sheet(self):
        self.check_change = Fal1se
        path = QFileDialog.getOpenFileName(self, 'Open CSV', os.getenv('HOME'),
                                           'CSV(*.csv)')
        if path[0] != '':
            with open(path[0], newline='') as csv_file:
                self.setRowCount(0)
                self.setColumnCount(10)
                my_file = csv.reader(csv_file, delimiter=',', quotechar='|')
                for row_data in my_file:
                    row = self.rowCount()
                    self.insertRow(row)
                    if len(row_data) > 10:
                        self.setColumnCount(len(row_data))
                    for column, stuff in enumerate(row_data):
                        item = QTableWidgetItem(stuff)
                        self.setItem(row, column, item)
        self.check_change = True