Спасибо daegontaven, я начинаю понимать разницу между Qthread и другими. Я думаю, у меня достаточно, чтобы начать играть с ним, еще раз спасибо

аюсь загрузить некоторые данные, которые занимают более 30 секунд. В течение этого времени я хочу, чтобы пользователь увидел небольшой графический интерфейс с надписью «Загрузка», затем «Загрузка ...», затем «Загрузка ...», затем «Загрузка». и т. д. Я прочитал кое-что, и я думаю, что я должен поместить это в отдельный поток. Я нашел кого-то, у кого была похожая проблема, предполагая, что решение было в правильном месте:

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

В нижней части файла у меня есть тестовая функция

def test(self):
    tmp = InfoMessage()

    while True:
        print(1)

и функция 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

Когда я запускаю только функцию InfoMessage, она работает нормально и обновляется каждые 0,5 секунды и т. Д. Однако, когда я добавляю это как часть загрузочного файла, графический интерфейс пользователя пуст и неправильно отображается. Я знаю, что он остается в тестовой функции из-за оператора print там.

Может ли кто-нибудь указать мне правильное направление? Я думаю, что я пропускаю пару шагов.

Ответы на вопрос(1)

Ваш ответ на вопрос