Exemplo n.º 1
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.sports = []
        self.ui.add_btn.clicked.connect(self._newForm)

        self.ui.item1 = QtWidgets.QListWidgetItem("Events")
        self.ui.main_list.addItem(self.ui.item1)
        self.ui.item2 = QtWidgets.QListWidgetItem("Results")
        self.ui.main_list.addItem(self.ui.item2)
        self.ui.main_list.itemClicked.connect(self._mainClicked)

        self.manager = QtNetwork.QNetworkAccessManager()
        self.sport_req = QtNetwork.QNetworkRequest(QtCore.QUrl("API URL"))
        self.sport_reply = self.manager.get(self.sport_req)
        self.sport_reply.finished.connect(self._sportsReply)

        self.ui.sport_combo.activated.connect(self._mainReq)
        self.ui.subClass_list.itemClicked.connect(self._loadForm)
        self.sport_dic = {}
        self.loaded = []
        self.resizeTimer = QtCore.QTimer()
        self.resizeTimer.setSingleShot(True)
        self.resizeTimer.timeout.connect(self.tryResize)

    def _mainReq(self):
        self.ui.subClass_list.clear()
        self.ui.add_btn.setEnabled(True)
        self.selected_sport = self.sport_dic.get(
            self.ui.sport_combo.currentText())
        selected = self.ui.main_list.currentItem()
        if selected.text() == "Events":
            dic = {"offset": 0, "limit": 100, "sport_id": self.selected_sport}
            vari_req = QtCore.QJsonDocument.fromVariant(dic)
            json_req = QtCore.QJsonDocument.toJson(vari_req)

            req = QtNetwork.QNetworkRequest(QtCore.QUrl("API URL"))
            req.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader,
                          "application/json")
            self.event_reply = self.manager.post(req, json_req)
            self.event_reply.finished.connect(self._eventsReply)

        if selected.text() == "Results":
            pass

    def _loadForm(self, item):
        i = self.ui.subClass_list.currentRow()
        self.form = Form()
        self.ui.formWidgetLayout.addWidget(self.form)
        self.form.formClosed.connect(self._closeForm)

        title = self.events["message"][i]["title"]
        self.loaded.append(title)
        self.form.form.title_edit_3.setText(title)

        dateTime = str(self.events["message"][i]["event_time"])[0:19]
        date = QtCore.QDateTime.fromString(dateTime, "yyyy-MM-ddTHH:mm:ss")
        self.form.form.dateTime_edit_3.setDateTime(date)
        self.loaded.append(dateTime)  ####fix this after Ali comes!

        description = self.events["message"][i]["description"]
        self.form.form.description_edit_5.append(description)
        self.loaded.append(description)

        self.event_id = self.events["message"][i]["id"]

        league = self.events["message"][i]["league"]["name"]
        self.form.form.lig_combo_5.addItem(league)
        self.loaded.append(league)
        self.leaguesReq(self.selected_sport)

        location = self.events["message"][i]["location"][
            "address"] + " " + self.events["message"][i]["location"][
                "name"] + " " + self.events["message"][i]["location"]["city"]
        self.form.form.location_combo_3.addItem(location)
        self.loaded.append(location)
        teams = []
        for j in range(len(self.events["message"][i]["teams"])):
            self.form.team.addTeam(
                self.events["message"][i]["teams"][j]["name"])
            teams.append(self.events["message"][i]["teams"][j]["name"])
        self.loaded.append(teams)

    def _eventsReply(self):
        reply_file = self.event_reply.readAll()
        json_file = QtCore.QJsonDocument.fromJson(reply_file)
        self.events = json_file.toVariant()
        # print(self.events)

        for i in range(len(self.events["message"])):
            self.ui.subClass_list.addItem(
                str(self.events["message"][i]["title"]))

    def leaguesReq(self, sport_id):

        dic = {"sports": [{"id": sport_id}]}
        vari_req = QtCore.QJsonDocument.fromVariant(dic)
        json_req = QtCore.QJsonDocument.toJson(vari_req)

        req = QtNetwork.QNetworkRequest(QtCore.QUrl("API URL"))
        req.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader,
                      "application/json")
        self.league_reply = self.manager.post(req, json_req)
        self.league_reply.finished.connect(self._leaguesReply)

    def _leaguesReply(self):
        reply_file = self.league_reply.readAll()
        json_file = QtCore.QJsonDocument.fromJson(reply_file)
        v = json_file.toVariant()
        for i in range(len(v["message"])):
            self.form.form.lig_combo_5.addItem(v["message"][i]["name"])

    def _sportsReply(self):
        reply_file = self.sport_reply.readAll()
        json_file = QtCore.QJsonDocument.fromJson(reply_file)
        v = json_file.toVariant(
        )  #changing variant of c++ to normal python variable that can be anything
        for i in range(len(v["message"])):
            self.sport_dic.update(
                {v["message"][i]["name"]: v["message"][i]["id"]})
            self.ui.sport_combo.addItem(v["message"][i]["name"])

    def _mainClicked(self):
        try:
            self.form.cancel()
        except AttributeError:
            self.ui.sport_combo.setEnabled(True)

    def _newForm(self):
        self.ui.add_btn.setDisabled(True)
        self.ui.sport_combo.setDisabled(True)
        self.leaguesReq(self.selected_sport)
        self.form = Form()
        self.ui.formWidgetLayout.addWidget(self.form)
        self.form.formClosed.connect(self._closeForm)
        self.repaint()

    def _closeForm(self, btn):
        if btn == "save":
            pass
            # self.ui.sizePolicy.setHorizontalStretch(0)
            # self.restoreState(self.state)
        elif btn == "close":
            pass

        self.form.close()
        del (self.form)
        self.ui.add_btn.setEnabled(True)
        self.ui.sport_combo.setEnabled(True)
        self.resizeTimer.start(200)
        self.updateGeometry()
        self.repaint()

    def tryResize(self):
        self.resize(400, 400)