QMessageBox не разрушает себя после выделения? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть поток, который работает, и кнопка «остановить поток», которая при нажатии вызывает метод, который вызывает terminate () потока.У меня есть QMessage Box, который подтверждает кнопку остановки, прежде чем она завершается.Функциональность такая же, как и ожидалось, но если я снова запустил поток и нажал кнопку закрытия, я получил бы MessageBox для подтверждения, затем я выбрал подтверждение, и поток остановился, но появилось другое окно подтверждения.Это продолжается таким образом - если я запускаю его 3 раза, мне нужно подтвердить три поля, 4 я получаю 4 и т. Д. Первый блок завершит поток во всех случаях.Кажется, что MessageBox не уничтожается должным образом каждый раз, когда он появляется, поэтому они просто накапливаются?Не уверен, что происходит.

См. Код ниже.У меня есть нить my_thread и кнопка, связанная с функцией stop_thread, описанной ниже.

def stop_thread(self):
    prompt=QWidgets.QMessageBox.question(self, 'Stop!', 'Are you sure you want to stop thread?', QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
    if prompt == QtWidgets.QMessageBox.Yes:
        self.my_thread.terminate()
    else:
        pass

Я ожидаю, что каждый раз, когда я запускаю, а затем останавливаю нить, используя кнопку, появляется одно окно подтвержденияи после выбора «Да» поток будет прерван.На самом деле поток завершается, но я получаю несколько MessageBox-ов, появляющихся один за другим - их количество соответствует тому, сколько раз я запускал поток.

1 Ответ

0 голосов
/ 13 февраля 2019

Решено - это было потому, что я подключал stop_button к функции, описанной выше в функции, которую я использовал для запуска потока.Поэтому каждый раз, когда я запускал поток, я снова подключал его и вызывал функцию в дополнительное время.Чего я не знал, так это того, что вы можете подключать кнопки к функции несколько раз (или к нескольким функциям), но каждый день вы узнаете что-то новое.

Чтобы исправить, я перенес подключение кнопки остановки к функции stop_thread в основной класс и теперь отлично работает.

...