обновление для моего кода, на основе ответа Израиля Unterman:питон 3.4, настройка QWidgets.QMessageBox
Ошибка класса теперь
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow
class Error(QtWidgets.QMainWindow):
reply = False
last_reply_id = None
last_id = 0
def __init__(self, error_code_string, parent=None):
super().__init__(parent)
QtWidgets.QMessageBox.warning(self, "Warnung", error_code_string, QtWidgets.QMessageBox.Ok)
id = give_id(self)
def give_id(self):
self.last_id += 1
return self.last_id
def give_reply(self):
if last_id == last_reply_id:
return self.reply
else:
return None
def set_reply(self, button, id):
if button in (QMessageBox.Ok, QMessageBox.Yes):
reply = True
else:
reply = False
self.last_reply_id = id
return reply
И Test-Script поставляется с
from ErrorHandling import Error
Error('Test')
Если я использую нормальный код (практически один и тот же код, только завернутый в классе) появляется сообщение, а затем на линии
id = give_id(self)
Кодекс останавливается без ErrorMessage из питона, просто:
Process finished with exit code 1
Если я использую тест-скрипт, нет ничего (нет QMessageBox!), Чем это:
Process finished with exit code 1
Если Я отладки кода, инициализации() получает одни и те же объекты и переменные, но
super().__init__(parent)
не работает без каких-либо сообщений. Итак, где ошибка, или разница.
Здесь shortend Версия класса (это слишком долго, чтобы показать весь код здесь), из которого «Error» работает почти нормально:
from ErrorHandling import Error
class MainWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# set some variables
self.create_layout()
def create_layout(self):
# creates a GUI using QWidgets with some Inputboxes and one button
[...]
def button_start_clicked(self):
Error('Check the input')
Вот старый вопрос:
I есть проблема с настройкой QtWidgets.QMessageBox. Весь код следует за описанием.
ОшибкаHandling-Modul должна содержать сообщение об ошибке. При необходимости он также может задать вопрос. Функция ErrorMsg.errorMessage вызывается из других модулей в случае исключения. Будет добавлено больше функций.
Если я запускаю код следующее сообщение об ошибке:
Connected to pydev debugger (build 145.1504)
Traceback (most recent call last):
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.1.4\helpers\pydev\pydevd.py", line 1531, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.1.4\helpers\pydev\pydevd.py", line 938, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.1.4\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Quellcode/AllgTest.py", line 5, in <module>
reply = errm.errorMessage('Test')
File "C:/Quellcode\ErrorHandling.py", line 20, in errorMessage
msg_box.setIcon(QMessageBox.Warning)
TypeError: QMessageBox.setIcon(QMessageBox.Icon): first argument of unbound method must have type 'QMessageBox'
Process finished with exit code 1
Я попытался довольно некоторые вариации и гугле, но я понятия не имею, что эта проблема является, так как я нашел несколько примеров, которые используют линии QMessageBox .setIcon (QMessageBox.Icon) Итак, где моя ошибка?
И теперь код:
Существует следующая testscript, чтобы проверить мой ErrorMsg класса
from ErrorHandling import ErrorMsg
errm = ErrorMsg()
reply = errm.errorMessage('Test')
А вот мой ErrorHandling-Modul
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import QMainWindow
class ErrorMsg(QMainWindow):
def __init__(self):
pass
def giveback(self,button):
if button in (QMessageBox.Ok, QMessageBox.Yes):
reply = True
else:
reply = False
return reply
def errorMessage(self, error_msg, buttons='OK'):
msg_box = QMessageBox
msg_box.setIcon(QMessageBox.Warning)
msg_box.setWindowTitle('Warning')
if buttons == 'OK':
msg_box.setStandardButtons(QMessageBox.Ok)
elif buttons == 'YesNo':
msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
else:
error_msg = 'Unknown Button >' + buttons + '<, use >OK<or>YesNo<'
raise ValueError(error_msg)
msg_box.setText(error_msg)
clicked_button = msg_box.exec()
return giveback(clicked_button)
Спасибо за вашу помощь
James
Правильно, но он также должен использовать 'self' при вызове' giveback' метод;) –
@Israel Unterman I нужны функции, потому что в будущем развитии необходимо знать, какая кнопка была нажата, поэтому мне нужно вернуть значение. –