Контекст
Я хочу создавать анимации QObject в python.Например, я попытался анимировать фон объекта QLineEdit, чтобы сделать «красную вспышку» при вводе чего-то неправильного.Функция работает, поток запускается, и я вижу анимацию, но когда поток заканчивается, приложение сворачивается без отслеживания ошибок.Я получаю только
exit code -1073740940
которого я не нашел в интернете.
Минимальный рабочий пример
Вот мве, которое я сделал для того, чтобы вы воспроизвели этоошибка только с одним файлом.Вы заметите, что важная часть кода находится внутри класса LoginDialog.
from PyQt5.QtWidgets import QDialog, QLineEdit, QVBoxLayout, QApplication
from threading import Thread
import time
import sys
class Ui_LoginUi(object):
def setupUi(self, Ui_LoginUi):
Ui_LoginUi.setObjectName("LoginUi")
Ui_LoginUi.resize(293, 105)
self.layout = QVBoxLayout(Ui_LoginUi)
self.le_test = QLineEdit(Ui_LoginUi)
self.layout.addWidget(self.le_test)
class LoginDialog(QDialog, Ui_LoginUi):
def __init__(self):
super(LoginDialog, self).__init__()
self.setupUi(self)
self.le_test.textChanged.connect(self.redFlashThreader)
def redFlashThreader(self):
self.redFlashTread1 = Thread(target=self.lineEdit_redFlash, args=[self.le_test])
self.redFlashTread1.start()
def lineEdit_redFlash(self, *args):
inital_r = 255
initial_g = 127
initial_b = 127
for i in range(64):
initial_g += 2
initial_b += 2
time.sleep(0.005)
args[0].setStyleSheet("background-color: rgb(255,{},{})".format(initial_g, initial_b))
args[0].setStyleSheet("background-color: rgb(255,255,255")
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = LoginDialog()
dialog.show()
sys.exit(app.exec_())
Результаты
Если вы нажмете несколько раз, приложение зависнет и вылетит.Я хотел бы понять, почему, но без обратной связи, я нахожу это довольно сложно.Иногда это происходит после первого клика.Я думал, что это будет проблема конфликта потоков, но так как это происходит только с первым запущенным потоком, я не уверен.Кто-нибудь может указать мне правильное направление или объяснить мне, что происходит?