Функция setEnabled() в PyQt5 завершает программу

Пишу программу на PyQt5, мне необходимо сделать
кнопку QPushButton и QPlainTextEdit
доступной для пользователя.

Но когда я вызываю setEnabled(True) программа завершается и выдает такое сообщение:

Process finished with exit code -1073740791 (0xC0000409)

main.py

from PyQt5 import QtWidgets as qw
from dialog import Ui_Dialog
from interface2 import Ui_mwin
import sys

import project_funtions as pf


# constants
app = qw.QApplication(sys.argv)
mwin = qw.QMainWindow()
note_dialog_win = qw.QDialog()
dialog_ui = Ui_Dialog()
dialog_ui.setupUi(note_dialog_win)
ui = Ui_mwin()
ui.setupUi(mwin)


# functions
ui.pb_new_note.clicked.connect(note_dialog_win.show)
dialog_ui.pb_ok.clicked.connect(lambda: pf.append_note(dialog_ui.name_input.toPlainText(),
                                                       ui.notes_list,
                                                       note_dialog_win
                                                       )
                                )


# end
mwin.show()
sys.exit(app.exec_())

interface2.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_mwin(object):
    def setupUi(self, mwin):
        mwin.setObjectName("mwin")
        mwin.resize(450, 400)
        mwin.setMinimumSize(QtCore.QSize(450, 400))
        mwin.setMaximumSize(QtCore.QSize(450, 400))
        self.win = QtWidgets.QWidget(mwin)
        self.win.setObjectName("win")
        self.note_box = QtWidgets.QPlainTextEdit(self.win)
        self.note_box.setEnabled(False)
        self.note_box.setGeometry(QtCore.QRect(10, 10, 261, 291))
        self.note_box.setObjectName("note_box")
        self.notes_list = QtWidgets.QListWidget(self.win)
        self.notes_list.setGeometry(QtCore.QRect(280, 10, 161, 291))
        self.notes_list.setObjectName("notes_list")
        self.pb_new_note = QtWidgets.QPushButton(self.win)
        self.pb_new_note.setEnabled(True)
        self.pb_new_note.setGeometry(QtCore.QRect(260, 340, 170, 25))
        self.pb_new_note.setObjectName("pb_new_note")
        self.pb_save_changes = QtWidgets.QPushButton(self.win)
        self.pb_save_changes.setEnabled(False)
        self.pb_save_changes.setGeometry(QtCore.QRect(30, 340, 170, 25))
        self.pb_save_changes.setObjectName("pb_save_changes")
        mwin.setCentralWidget(self.win)

        self.retranslateUi(mwin)
        QtCore.QMetaObject.connectSlotsByName(mwin)

    def retranslateUi(self, mwin):
        _translate = QtCore.QCoreApplication.translate
        mwin.setWindowTitle(_translate("mwin", "Notes"))
        self.pb_new_note.setText(_translate("mwin", "Новая заметка"))
        self.pb_save_changes.setText(_translate("mwin", "Сохранить изменения"))

dialog.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(333, 137)
        self.name_input = QtWidgets.QTextEdit(Dialog)
        self.name_input.setGeometry(QtCore.QRect(10, 90, 201, 31))
        self.name_input.setObjectName("name_input")
        self.pb_ok = QtWidgets.QPushButton(Dialog)
        self.pb_ok.setGeometry(QtCore.QRect(240, 100, 75, 23))
        self.pb_ok.setObjectName("pb_ok")
        # self.pb_ok.setEnabled(False)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(60, 30, 241, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Имя заметки"))
        self.pb_ok.setText(_translate("Dialog", "Ok"))
        self.label.setText(_translate("Dialog", "Ведите пожалуйста название заметки"))

project_functions.py

from PyQt5.QtWidgets import QListWidget, QDialog, QPlainTextEdit, QPushButton

    
def note_name_moderate(note_name: str, note_names: list):
    """Checks if the given string can be used as a name of note"""
    if len(note_name) >= 1 and note_name not in note_names:
        return True
    else:
        return False


def get_items(qlst: QListWidget):
    """Returns list of items from QListWidget"""
    items = []
    for i in range(qlst.count()):
        items.append(qlst.item(i).text())
    return items


def append_note(note_name: str, qlst: QListWidget, win: QDialog, note_box: QPlainTextEdit, btn_save: QPushButton):
    """Appends note name to QListWidget"""
    if note_name_moderate(note_name, get_items(qlst)):
        qlst.addItem(note_name)
        win.hide()
        note_box.setEnabled(True)
        btn_save.setEnabled(True)

На функции append_note в файле project_functions.py программа завершается без сообщения об ошибке.

И да, я начинающий программист, поэтому прошу не бейте если это очень глупая ошибка.


Ответы (1 шт):

Автор решения: S. Nick

Всегда запускайте приложение в CMD/консоли/терминале и вы получите реальную ошибку.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtWidgets as qw
from PyQt5.QtWidgets import QListWidget, QDialog, QPlainTextEdit, QPushButton

import project_funtions as pf

#from dialog import Ui_Dialog
class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(333, 137)
        self.name_input = QtWidgets.QTextEdit(Dialog)
        self.name_input.setGeometry(QtCore.QRect(10, 90, 201, 31))
        self.name_input.setObjectName("name_input")
        self.pb_ok = QtWidgets.QPushButton(Dialog)
        self.pb_ok.setGeometry(QtCore.QRect(240, 100, 75, 23))
        self.pb_ok.setObjectName("pb_ok")
        # self.pb_ok.setEnabled(False)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(60, 30, 241, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Имя заметки"))
        self.pb_ok.setText(_translate("Dialog", "Ok"))
        self.label.setText(_translate("Dialog", "Ведите пожалуйста название заметки"))

#from interface2 import Ui_mwin
class Ui_mwin(object):
    def setupUi(self, mwin):
        mwin.setObjectName("mwin")
        mwin.resize(450, 400)
        mwin.setMinimumSize(QtCore.QSize(450, 400))
        mwin.setMaximumSize(QtCore.QSize(450, 400))
        self.win = QtWidgets.QWidget(mwin)
        self.win.setObjectName("win")
        self.note_box = QtWidgets.QPlainTextEdit(self.win)
        self.note_box.setEnabled(False)
        self.note_box.setGeometry(QtCore.QRect(10, 10, 261, 291))
        self.note_box.setObjectName("note_box")
        self.notes_list = QtWidgets.QListWidget(self.win)
        self.notes_list.setGeometry(QtCore.QRect(280, 10, 161, 291))
        self.notes_list.setObjectName("notes_list")
        self.pb_new_note = QtWidgets.QPushButton(self.win)
        self.pb_new_note.setEnabled(True)
        self.pb_new_note.setGeometry(QtCore.QRect(260, 340, 170, 25))
        self.pb_new_note.setObjectName("pb_new_note")
        self.pb_save_changes = QtWidgets.QPushButton(self.win)
        self.pb_save_changes.setEnabled(False)
        self.pb_save_changes.setGeometry(QtCore.QRect(30, 340, 170, 25))
        self.pb_save_changes.setObjectName("pb_save_changes")
        mwin.setCentralWidget(self.win)

        self.retranslateUi(mwin)
        QtCore.QMetaObject.connectSlotsByName(mwin)

    def retranslateUi(self, mwin):
        _translate = QtCore.QCoreApplication.translate
        mwin.setWindowTitle(_translate("mwin", "Notes"))
        self.pb_new_note.setText(_translate("mwin", "Новая заметка"))
        self.pb_save_changes.setText(_translate("mwin", "Сохранить изменения"))


# constants
app = qw.QApplication(sys.argv)
mwin = qw.QMainWindow()

note_dialog_win = qw.QDialog()
dialog_ui = Ui_Dialog()
dialog_ui.setupUi(note_dialog_win)

ui = Ui_mwin()
ui.setupUi(mwin)

# functions
ui.pb_new_note.clicked.connect(note_dialog_win.show)
dialog_ui.pb_ok.clicked.connect(
    lambda: pf.append_note(
        dialog_ui.name_input.toPlainText(),
        ui.notes_list,

# TypeError: append_note() missing 2 required positional arguments: 
# 'note_box' and 'btn_save'
        note_dialog_win,
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv       
        ui.note_box,
        ui.pb_save_changes
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
)

# end
mwin.show()
sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка