예제 #1
0
    def proBar(self):
        pb = QProgressBar(self)
        pb.resize(self.width(), self.barHeight)
        # pb.setMaximum(99)
        # pb.setValue(0)
        pb.move(0, self.height() - pb.height() - self.btnHeight)

        pb.setStyleSheet(
            "QProgressBar::chunk{background:qlineargradient(spread:pad,x1:0,y1:0,x2:1,y2:0,stop:0 #F8C63D,"
            "stop:1 #CC66E7);}")

        def pbFunc(int_):
            if int_ == 100:
                self.endBtn.setText("完成")
                self.endBtn.setFocus()

        pb.valueChanged.connect(pbFunc)
        return pb
예제 #2
0
class UpdaterGUI(QWidget):
    class Downloader(QThread):
        gotchunk = pyqtSignal(float)
        finished = pyqtSignal()
        error = pyqtSignal(str)

        def __init__(self, url):
            super().__init__()
            self.url = url

        def run(self):
            try:
                binfile = open(tempfile, 'wb')
                dlink = requests.Session().get(self.url, stream=True)
                total_size = int(dlink.headers['Content-Length'])
                chunk_size = 512
                recived = 0

                for chunk in dlink.iter_content(chunk_size=chunk_size):
                    recived += binfile.write(chunk)
                    self.gotchunk.emit(recived / total_size)

                self.finished.emit()
                binfile.close()
                dlink.close()
            except Exception as e:
                self.error.emit(str(e))

    def __init__(self):
        super().__init__()
        self.durl = 'https://raw.githubusercontent.com/fcu-d0441320/iLearnBackupTool/master/iLearnBackupTool.exe'
        self.progressbar = QProgressBar(self)
        self.progresslabel = QLabel(self.progressbar)
        self.initGUI()
        self.setWindowIcon(QIcon(":img/Main_Icon.png"))

        self.downloader = self.Downloader(self.durl)
        self.downloader.gotchunk.connect(self.setProgressValue)
        self.downloader.error.connect(self.errorHandler)
        self.downloader.finished.connect(self.finished)
        self.string = language.string()

    def startDownload(self, language):
        self.string.setLanguage(language)
        self.setWindowTitle(self.string._('iLearnBackupTool Updater'))
        self.show()
        self.downloader.start()

    def initGUI(self):

        self.resize(975, 35)

        self.progressbar.setGeometry(5, 5, 1000, 25)
        self.progressbar.setValue(0)

        w = 50
        h = 30
        x = (self.progressbar.width() / 2 - w / 2)
        y = (self.progressbar.height() / 2 - h / 2)
        self.progresslabel.setGeometry(x, y, w, h)
        self.progresslabel.setText('{0:2d}%'.format(0))

    def setProgressValue(self, val):
        self.progressbar.setValue(round(val * 100, 2))
        self.progresslabel.setText('{0:.2f}%'.format(val * 100))

    def errorHandler(self, err_msg):
        QMessageBox.information(self, self.string._('Oops! Something error!'),
                                err_msg, QMessageBox.Ok)
        os.remove(tempfile)
        QCoreApplication.instance().quit()

    def finished(self):
        QMessageBox.information(self, self.string._('Download finish!'),
                                self.string._('Download success!'),
                                QMessageBox.Ok)
        with open("update.cmd", "w") as f:
            f.write('@ echo %s\n' % (self.string._('Update is in process...')))
            f.write('@ Title %s\n' %
                    (self.string._('Update is in process...')))
            f.write('@ ping 127.0.0.1 -n 3 -w 1000 > nul\n')
            f.write(
                '@ taskkill -F -T -FI "IMAGENAME eq iLearnBackupTool.exe"\n')
            f.write('@ ping 127.0.0.1 -n 2 -w 1000 > nul\n')
            f.write("@ del iLearnBackupTool.exe\n")
            f.write("@ rename %s %s\n" % (tempfile, downfile))
            f.write("@ start iLearnBackupTool\n")
            f.write("@ exit\n")
        subprocess.Popen("update.cmd")
        QCoreApplication.instance().quit()

    def closeWindow(self):
        QCoreApplication.instance().quit()