Почему возникает ошибка: "Process finished with exit code -1073740791 (0xC0000409)"?
Почему при попытке открытия окна регистрации программа закрывается и пишет "Process finished with exit code -1073740791 (0xC0000409)"?
При попытке открытия окна для вывода ошибки регистрации программа закрывается и пишет:
Process finished with exit code -1073740791 (0xC0000409)
Оставлю ссылку на репозиторий, так будет полегче, так как там несколько файлов.
Ответы (2 шт):
Используйте отладчик для поиска места, где программа завершается, и анализируйте стек вызовов, чтобы определить проблемное место в коде.
Я не менял вашу логику, хотя со временем вы сами ее поменяете.
Я прокомментировал все изменения, которые внес в ваш код.
Обратите внимание что в моем примере поменяно 'db/db.sqlite' на 'db/db.db', потому что мне так удобнее.
Попробуйте, если что-то не не понятно - спросите.
Update:
Я забыл написать еще раз, что для того чтобы получать реальную ошибку,
необходимо запускать приложение в терминале/консоли/CMD
main.py
import sys
import random
from PyQt5 import uic, QtCore, QtGui, QtWidgets
#import check_db
#from check_db import *
from check_db import CheckThread # !!! правильно так, надо видеть что вы импортируете
class AppMain(QtWidgets.QWidget): # + добавил, чтобы показать окно после авторизации
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi('ui/main.ui', self)
class Loading(QtWidgets.QWidget):
def __init__(self, *args):
super().__init__()
self.initUI()
def initUI(self):
self.setFixedSize(800, 600) # ?
self.label_animation = QtWidgets.QLabel(self)
self.movie = QtGui.QMovie('logo/loader.gif')
self.label_animation.setMovie(self.movie)
timer = QtCore.QTimer(self)
self.startAnimation()
timer.singleShot(4900 + random.randrange(500), self.stopAnimation)
self.show()
def startAnimation(self):
self.movie.start()
def stopAnimation(self):
self.appMain = AppMain() # +++
self.appMain.show() # +++
self.movie.stop()
self.close()
# ----------------> vvvvvvvvvvv <---------------------------- и все
class App(QtWidgets.QMainWindow): #, QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi('ui/vhod.ui', self)
self.loading_flag = False # +++ флаг открытия окна после авторизации
self.initUI()
self.fio.setFocus() # +++
def initUI(self):
self.setWindowTitle('Вход / Регестрация ?')
self.setFixedSize(750, 550) # ? учите менеджеры компоновки
self.reg_2.clicked.connect(self.registration)
self.vhod_2.clicked.connect(self.auth)
# ?
self.check_db = CheckThread(self)
self.check_db.mysignal.connect(self.on_signal) # +++
def on_signal(self, text): # +++
if text == 'Ok': # ...
self.loading_flag = True
else:
self.loading_flag = False
''' !!!!!!!!!!!!!!!!!!!!! я не знаю что это !!!!!!!!!!!!!!!!!!
def reg_check(funct):
def wraper(self):
if (self.fio != []) and ('@' in self.email) and (self.pas != ''):
pass
else:
check_db.Osh('Не правильно введены данные')
check_db.Osh.show()
return wraper
# Обработчик сигнала
def signal_handler(self, value):
QtWidgets.QMessageBox.about(self, 'Оповещение', value)
'''
def registration(self):
fio = self.fio.text()
email = self.email.text()
pas = self.pas.text()
if not email or not pas or not fio: # +++
msg = QtWidgets.QMessageBox.information( # +++
self,
'Внимание',
'Заполните все поля ввода.')
return # +++
self.check_db.thr_reg(fio, email, pas)
def auth(self):
email = self.email_2.text()
pas = self.pas_2.text()
if not email or not pas: # +++
msg = QtWidgets.QMessageBox.information( # ...
self,
'Внимание',
'Заполните все поля ввода.')
return # +++
self.check_db.thr_login(email, pas)
if self.loading_flag: # +++
self.loading = Loading(self)
self.loading.show()
self.close() # +++
else: # +++
msg = QtWidgets.QMessageBox.information( # +++
self,
'Внимание',
'Что-то пошло не так.')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon('logo/logo.png'))
ex = App()
# ??? widget = QtWidgets.QWidget() # ???
ex.show()
try:
sys.exit(app.exec())
except SystemExit:
print('Closing Window...')
check_db.py
from PyQt5 import QtCore, QtWidgets # +
#from db.db_handler import *
from db.db_handler import Osh, login, registr # !!! так
# ?class CheckThread(QtCore.QThread): с чего вы решили наследоваться от QThread ???
class CheckThread(QtWidgets.QWidget):
mysignal = QtCore.pyqtSignal(str)
def __init__(self, parent=None): # +++
super(CheckThread, self).__init__(parent) # +++
self.parent = parent # +++
def thr_login(self, email, passw):
login(email, passw, self.mysignal)
def thr_reg(self, fio, email, passw):
# ------------> vvvvvvvvvvv <-----------------------------------------------------
registr(self.parent, fio, email, passw, self.mysignal)
db_handler.py
import sqlite3
from PyQt5 import uic, QtCore, QtGui, QtWidgets
# ?class Osh(QtWidgets.QWidget):
class Osh(QtWidgets.QDialog): # !!! вы форму делали наследуясь от QDialog !!!
def __init__(self, danget_text: str):
super().__init__()
# ? QtWidgets.QMainWindow.__init__(self)
uic.loadUi('ui/osh.ui', self)
self.pushButton.clicked.connect(self.close) # +++
self.danget_text = danget_text # +++
self.initUI()
def initUI(self):
self.label.setText(self.danget_text)
# ? self.app = App(self)
# ? self.pushButton.clicked.connect(self.app)
def login(email, passw, signal):
con = sqlite3.connect('db/db.db') #('db/db.sqlite')
cur = con.cursor()
# Проверка на существование аккаунта
cur.execute(f'SELECT * FROM user WHERE email="{email}";')
value = cur.fetchall()
if value != [] and value[0][3] == passw:
signal.emit('Ok')
print('Авторизован')
else:
signal.emit('Неправильно введет логин или пароль')
print('не авторизован')
cur.close()
con.close()
# --------> vvvvv <------------------------------------------------------------
def registr(_self, fio, email, passw, signal):
# con = sqlite3.connect('db/db.sqlite') # мне так удобнее
con = sqlite3.connect('db/db.db') # мне так удобнее !!!
cur = con.cursor()
cur.execute(f'SELECT * FROM user WHERE email="{email}";')
value = cur.fetchall()
print(f'def registr value : {value}') #
# if value != []:
if value: # !!! так правильно
signal.emit('Аккаунт с этим email уже используется')
print('не зареган')
# ----> vvvvv <-------------------------------------------------------------
_self.osh = Osh('Аккаунт с этим email уже используется')
_self.osh.exec()
# elif value == []:
else: # +++
cur.execute(f"INSERT INTO user (fio, email, password) VALUES ('{fio}', '{email}', '{passw}')")
print(f"Зарегистрирован: {_self.fio.text()}")
_self.fio.clear() # +++
_self.email.clear() # +++
_self.pas.clear() # +++
_self.email_2.setFocus() # +++
con.commit()
cur.close()
con.close()



