@vadimeasy

Как реализовать прогресс бар в Qt Desinger?

Всем привет, столкнулся с тем, что нет в интернете годного примера по реализации прогесс бара с привязкой к скачиванию с помощью Qt5. В моей программенужно сделать несколько кнопок со скачиванием файлов, но я нигде не могу найти информацию, как именно можно реализовать процесс скачивания, чтобы пользователь видел это. На данный момент думаю, что мои функции скачивания не подойду, но всё равно приложу.

На основе этой функции написаны и остальные:
def save_rutoken(link3):
    filename = link3.split('/')[-1]
    print (filename)
    r = requests.get(link3)
    open(filename, 'wb').write(r.content)
    save_rutoken = tk.Label(win, text='Рутокен скачан', fg='green', bg='#80A6FF', font=('Arial',12))
    save_rutoken.pack()
    save_rutoken.place(x=190, y=37)
    p = Process(target=save_rutoken)
    p.start()
    print('something')


link3 это переменная содержащая в себе ссылку на скачивание.

вот так выглядит сам интерфейс визуально:
61b45818b0f83360574482.jpeg

код интерфейса:
from multiprocessing import Process
from PyQt5 import QtCore, QtGui, QtWidgets
import requests

link3 = 'https://download.rutoken.ru/Rutoken/Drivers/Current/rtDrivers.exe'

class Ui_UTM(object):
    def setupUi(self, UTM):
        UTM.setObjectName("UTM")
        UTM.resize(547, 303)
        UTM.setSizeGripEnabled(False)
        UTM.setModal(False)
        self.download_rutoken = QtWidgets.QPushButton(UTM)
        self.download_rutoken.setGeometry(QtCore.QRect(20, 10, 121, 51))
        self.download_rutoken.setObjectName("download_rutoken")
        self.download_utm = QtWidgets.QPushButton(UTM)
        self.download_utm.setGeometry(QtCore.QRect(150, 10, 121, 51))
        self.download_utm.setObjectName("download_utm")
        self.download_desktop = QtWidgets.QPushButton(UTM)
        self.download_desktop.setGeometry(QtCore.QRect(280, 10, 121, 51))
        self.download_desktop.setObjectName("download_desktop")
        self.download_vpn = QtWidgets.QPushButton(UTM)
        self.download_vpn.setGeometry(QtCore.QRect(410, 10, 121, 51))
        self.download_vpn.setObjectName("download_vpn")
        self.status_text = QtWidgets.QLabel(UTM)
        self.status_text.setGeometry(QtCore.QRect(190, 90, 141, 31))
        self.status_text.setObjectName("status_text")
        self.proress_to_rutoken = QtWidgets.QProgressBar(UTM)
        self.proress_to_rutoken.setGeometry(QtCore.QRect(20, 70, 131, 23))
        self.proress_to_rutoken.setProperty("value", 24)
        self.proress_to_rutoken.setObjectName("proress_to_rutoken")
        self.proress_to_rutoken_2 = QtWidgets.QProgressBar(UTM)
        self.proress_to_rutoken_2.setGeometry(QtCore.QRect(150, 70, 131, 23))
        self.proress_to_rutoken_2.setProperty("value", 24)
        self.proress_to_rutoken_2.setObjectName("proress_to_rutoken_2")
        self.proress_to_rutoken_3 = QtWidgets.QProgressBar(UTM)
        self.proress_to_rutoken_3.setGeometry(QtCore.QRect(280, 70, 131, 23))
        self.proress_to_rutoken_3.setProperty("value", 24)
        self.proress_to_rutoken_3.setObjectName("proress_to_rutoken_3")
        self.proress_to_rutoken_4 = QtWidgets.QProgressBar(UTM)
        self.proress_to_rutoken_4.setGeometry(QtCore.QRect(410, 70, 131, 23))
        self.proress_to_rutoken_4.setProperty("value", 24)
        self.proress_to_rutoken_4.setObjectName("proress_to_rutoken_4")
        self.pushButton = QtWidgets.QPushButton(UTM)
        self.pushButton.setGeometry(QtCore.QRect(100, 180, 141, 51))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(UTM)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 180, 141, 51))
        self.pushButton_2.setObjectName("pushButton_2")
        self.status_bar = QtWidgets.QLabel(UTM)
        self.status_bar.setGeometry(QtCore.QRect(20, 119, 521, 41))
        self.status_bar.setText("")
        self.status_bar.setObjectName("status_bar")

        self.retranslateUi(UTM)
        QtCore.QMetaObject.connectSlotsByName(UTM)

        self.add_functions()

    def retranslateUi(self, UTM):
        _translate = QtCore.QCoreApplication.translate
        UTM.setWindowTitle(_translate("UTM", "UTM Настройка"))
        self.download_rutoken.setText(_translate("UTM", "Скачать Рутокен"))
        self.download_utm.setText(_translate("UTM", "Скачать UTM "))
        self.download_desktop.setText(_translate("UTM", "Скачать Desktop DxBx"))
        self.download_vpn.setText(_translate("UTM", "Скачать Open VPN"))
        self.status_text.setText(_translate("UTM", "Статус обработки запроса:"))
        self.pushButton.setText(_translate("UTM", "Настроить Брандмауэр"))
        self.pushButton_2.setText(_translate("UTM", "Перезапустить службы"))

    def add_functions(self):
        self.download_rutoken.clicked.connect(self.rutoken_download)

    def rutoken_download(self):
        filename = link3.split('/')[-1]
        print(filename)
        r = requests.get(link3)
        open(filename, 'wb').write(r.content)
        p = Process(target=self.rutoken_download)
        p.start()
        print('something')

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    UTM = QtWidgets.QDialog()
    ui = Ui_UTM()
    ui.setupUi(UTM)
    UTM.show()
    sys.exit(app.exec_())
  • Вопрос задан
  • 851 просмотр
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Пример вывода прогресса на Qt есть прямо здесь. Пример контроля загрузки есть в документации requests. Объединить это в одну программу - дело не хитрое.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы