Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
cless7
0 / 0 / 0
Регистрация: 22.06.2019
Сообщений: 3
1

Отображение интерфейса во время загрузки файла через sftp.get

07.07.2019, 10:00. Просмотров 234. Ответов 2
Метки нет (Все метки)

День добрый!

Python 3.4
PyQt5
PyCharm 2018.3
PyInstaller 3.4

Имеется программа updater, получающая файл с сервера по SFTP.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<...>
 
class UpdaterWin(QWidget):
    def __init__(self):
        super().__init__()
 
        self.setFixedSize(300, 50)
        self.setWindowTitle('Обновление программы')
        self.setWindowIcon(QIcon('img/update.png'))
        self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowCloseButtonHint)
        self.setWindowFlags(self.windowFlags() & ~Qt.WindowCloseButtonHint)
 
        authHeadLabel = QLabel(self)
        authHeadLabel.setText('Обновление программы...')
 
        authHeadLabelFont = QFont("Arial", 14, QFont.Bold)
        authHeadLabel.setFont(authHeadLabelFont)
 
        grid = QGridLayout()
        grid.setSpacing(10)
 
        grid.addWidget(authHeadLabel, 0, 0, 1, 1)
        authHeadLabel.setAlignment(Qt.AlignCenter)
 
        self.setLayout(grid)
 
        self.show()
 
        progressDict = {}
        progressEveryPercent = 10
 
        for i in range(0, 101):
            if i % progressEveryPercent == 0:
                progressDict[str(i)] = ""
 
        def printProgressDecimal(x, y):
            if int(100 * (int(x) / int(y))) % progressEveryPercent == 0 and progressDict[
                str(int(100 * (int(x) / int(y))))] == "":
                print("{}% ({} Transfered(B)/ {} Total File Size(B))".format(str("%.2f" % (100 * (int(x) / int(y)))), x, y))
                #self.lcd.display(("{}%"))
                progressDict[str(int(100 * (int(x) / int(y))))] = "1"
 
        try:
 
            transport = paramiko.Transport((sftpServerHost, int(sftpServerPort)))
            transport.connect(username=sftpServerUser, password=sftpServerPass)
 
            sftp = paramiko.SFTPClient.from_transport(transport)
            sftp.get(sftpServerRootPath + "Client/Client.exe", "update/Client.exe", callback=lambda x,y: printProgressDecimal(x,y))
 
            try:
                copyfile("update/Client.exe", "Client.exe")
            except Exception:
                pass
 
            sftp.close()
 
        except Exception:
            print("Не удалось обновить программу")
            QMessageBox.about(self, "Ошибка", "Не удалось обновить программу")
            pass
 
        sys.exit()
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = UpdaterWin()
    sys.exit(app.exec_())
Во время загрузки файла интерфейс блокируется до прорисовки "Обновление программы..." в "authHeadLabel" и не отвечает до окончания загрузки файла. Хотя в консоль корректно выводится прогресс загрузки:

...
10.03% (2555904 Transfered(B)/ 25486416 Total File Size(B))
20.06% (5111808 Transfered(B)/ 25486416 Total File Size(B))
...

Как прорисовать интерфейс до начала загрузки файла по SFTP (и обновлять в нем данные во время загрузки файла)?
Или может быть есть простой пример параллельных процессов - отображения интерфейса и загрузки файла по SFTP (без блокирования друг друга).

Спасибо!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2019, 10:00
Ответы с готовыми решениями:

Отображение прогресса загрузки файла
Как сделать, чтобы во время загрузки файла запускался прогресс бар?

Отображение процесса загрузки файла на сервер
Подскажите как сделать так чтобы отображался процесс загрузки файла на сервер, например сколько...

Отображение скорости загрузки файла на сервера
Недавно создал файлобменик хочу к нему прикрутить показатель скорости загрузки и оставшееся время,...

Пауза во время загрузки файла
Как или какие методы, библиотеки позволяют ставить паузу во время загрузки файла. Что бы при...

Зависает программа во время загрузки файла
Я создаю окно с помощь CreateDialog вот код загрузчика function DownLoadFileSock(const...

2
tooru
393 / 251 / 155
Регистрация: 07.01.2019
Сообщений: 824
07.07.2019, 12:50 2
GUI в python однопоточный, так что если нужно делать что-то одновременно, надо делать в другом потоке, в pyйt есть свои средства многопоточности
0
DmFat
60 / 43 / 18
Регистрация: 23.07.2018
Сообщений: 215
11.07.2019, 16:33 3
К ответу выше. https://habr.com/ru/post/150274/
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2019, 16:33

через короткое время после загрузки выключается интернет
пожалуйста помогите!

Как узнать размер файла во время загрузки
Скрипт загрузки написанный на CGI.pm сначала создает временный файл, а потом уже осуществляет...

Компьютер полностью зависает, через некоторое время после загрузки
Когда включают комп он загружается и через n время полностью виснет помогите пожалуйста проц amd...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru