Функция 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_())
