python 3.4, setting up QWidgets.QMessageBox



根据Israel Unterman的回复对我的代码进行更新:

Error-Class现在是

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)

代码停止,python没有任何错误消息,只是:

Process finished with exit code 1

如果我使用测试脚本,没有什么(没有QMessageBox!)比以下:

Process finished with exit code 1

如果我调试代码,init()获得相同的对象和变量,但

super().__init__(parent)

失败,没有任何消息。那么,错误或差异在哪里呢?

这里是类的简化版本(它太长了,不能在这里显示所有代码),从它的"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')

这是老问题:

我有一个关于QtWidgets.QMessageBox的设置问题。所有代码都遵循描述。

errorhandling - module应该给出一个关于错误的消息。如果需要,它也会问一个问题。函数ErrorMsg。在捕获异常的情况下,从其他模块调用errorMessage。将会添加更多的功能。

如果我运行代码,会出现以下错误:

Connected to pydev debugger (build 145.1504)
Traceback (most recent call last):
  File "C:Program Files (x86)JetBrainsPyCharm Community Edition 2016.1.4helperspydevpydevd.py", line 1531, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:Program Files (x86)JetBrainsPyCharm Community Edition 2016.1.4helperspydevpydevd.py", line 938, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:Program Files (x86)JetBrainsPyCharm Community Edition 2016.1.4helperspydev_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:/QuellcodeErrorHandling.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)那么我的错误在哪里?

现在是代码:

下面是测试ErrorMsg-class的测试脚本
from ErrorHandling import ErrorMsg
errm = ErrorMsg()
reply = errm.errorMessage('Test')

这里是我的errorhandling - module

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)

谢谢你的帮助

詹姆斯

您没有创建消息框的对象。创建一个对象使用:

msg_box = QMessageBox()

但是您不需要经历所有这些,因为QMessageBox具有用于显示消息的静态函数,您可以直接在QMessageBox类上调用这些函数。例如:

QMessageBox.warning(None, 'title', 'msg')

您还可以对按钮进行一些控制,参见QMessageBox

相关内容

  • 没有找到相关文章

最新更新