O problema é que, enquanto as funções de download estão em execução, o aplicativo não pode responder a eventos - o controle não retorna ao loop principal.
Eu acho que o mecanismo mais simples é fazer os downloads em threads separados e usar o mecanismo de sinais e slots do Qt para atualizar as barras de progresso (os threads não podem interagir diretamente com a interface do usuário).
Além disso, em vez de abrir arquivos para gravar a resposta HTTP, talvez seja mais eficiente usar uma função como urllib.urlretrieve para escrever os arquivos diretamente.