A GUI de segmentação PyQt5 não funciona

Estou tentando carregar alguns dados que levam mais de 30 segundos. Durante esse período, desejo que o usuário veja uma pequena GUI que diz "Carregando", depois "Carregando ...", depois "Carregando ..." e "Carregando". Eu li e acho que preciso colocar isso em um tópico separado. Encontrei alguém que tinha um problema semelhante, sugerindo que a solução era esta no lugar certo:

t = threading.Thread(target=self.test)
t.daemon = True
t.start()

Em uma parte inferior do arquivo, tenho a função de teste

def test(self):
    tmp = InfoMessage()

    while True:
        print(1)

e a função InfoMessage

from PyQt5 import uic, QtCore, QtGui, QtWidgets
import sys

class InfoMessage(QtWidgets.QDialog):
    def __init__(self, msg='Loading ', parent=None):
        try:
            super(InfoMessage, self).__init__(parent)
            uic.loadUi('ui files/InfoMessage.ui',self)

            self.setWindowTitle(' ')

            self.o_msg = msg
            self.msg = msg
            self.info_label.setText(msg)
            self.val = 0

            self.timer = QtCore.QTimer()
            self.timer.setInterval(500)
            self.timer.timeout.connect(self.update_message)
            self.timer.start()

            self.show()
        except BaseException as e:
            print(str(e))

    def update_message(self):
        self.val += 1
        self.msg += '.'

        if self.val < 20:
            self.info_label.setText(self.msg)
        else:
            self.val = 0
            self.msg = self.o_msg

        QtWidgets.QApplication.processEvents()

def main():
    app = QtWidgets.QApplication(sys.argv)      # A new instance of QApplication
    form = InfoMessage('Loading ')                  # We set the form to be our MainWindow (design)
    app.exec_()                                 # and execute the app

if __name__ == '__main__':                      # if we're running file directly and not importing it
    main()                                      # run the main function

Quando executo a função InfoMessage sozinha, ela funciona bem e é atualizada a cada 0,5 segundos etc. No entanto, quando eu divido isso como parte do arquivo de carregamento, a GUI fica em branco e é exibida incorretamente. Eu sei que ele fica na função de teste por causa da declaração de impressão lá.

Alguém pode me apontar na direção certa? Acho que estou perdendo alguns passos.

questionAnswers(1)

yourAnswerToTheQuestion