Я хочу получить доступ к индикатору выполнения (который находится в Ui_MainWindow()
классе) setMaximum()
из другого класса / потока (DownloadThread()
класс).
Я пробовал сделать DownloadThread()
класс наследуемым от Ui_MainWindow
: DownloadThread(Ui_MainWindow)
. Но когда я пытаюсь установить максимальное значение индикатора выполнения:
Ui_MainWindow.progressBar.setMaximum(100)
Я получаю такую ошибку:
AttributeError: объект типа 'Ui_MainWindow' не имеет атрибута 'progressBar'
Мой код:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
# ...
self.updateButton = QtGui.QPushButton(self.centralwidget)
self.progressBar = QtGui.QProgressBar(self.centralwidget)
self.updateStatusText = QtGui.QLabel(self.centralwidget)
# ...
self.updateButton.clicked.connect(self.download_file)
# ...
def download_file(self):
self.thread = DownloadThread()
self.thread.data_downloaded.connect(self.on_data_ready)
self.thread.start()
def on_data_ready(self, data):
self.updateStatusText.setText(str(data))
class DownloadThread(QtCore.QThread, Ui_MainWindow):
data_downloaded = QtCore.pyqtSignal(object)
def run(self):
self.data_downloaded.emit('Status: Connecting...')
ftp = FTP('example.com')
ftp.login(user='user', passwd='pass')
ftp.cwd('/some_directory/')
filename = '100MB.bin'
totalsize = ftp.size(filename)
print(totalsize)
# SET THE MAXIMUM VALUE OF THE PROGRESS BAR
Ui_MainWindow.progressBar.setMaximum(totalsize)
self.data_downloaded.emit('Status: Downloading...')
global localfile
with open(filename, 'wb') as localfile:
ftp.retrbinary('RETR ' + filename, self.file_write)
ftp.quit()
localfile.close()
self.data_downloaded.emit('Status: Updated!')
def file_write(self, data):
global localfile
localfile.write(data)
print(len(data))
Ui_MainWindow.progressBar.setMaximum(100)
должно бытьself.progressBar.setMaximum(100)
. - person Heike   schedule 22.08.2019file_write
. - person Martin Prikryl   schedule 22.08.2019progressBar.setMaximum
изDownloadThread
. Так что простоеself.progressBar.setMaximum(100)
не поможет (хотя это действительно улучшение). - person Martin Prikryl   schedule 22.08.2019