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.