【问题标题】:PyQt5 - pythonw.exe crash on handling clicked eventPyQt5 - pythonw.exe 在处理点击事件时崩溃
【发布时间】:2016-11-19 16:19:36
【问题描述】:

我是 PyQt5 的新手,我遇到了错误(pythonw.exe 不再工作),代码如下:

导入系统 从 PyQt5.QtWidgets 导入 QWidget、QPushButton、QApplication 从 PyQt5.QtCore 导入 QCoreApplication

类示例(QWidget):

def __init__(self):
    super().__init__()
    self.initUI()

def initUI(self):               

    qbtn = QPushButton('Quit', self)
    qbtn.clicked.connect(self.q)
    qbtn.resize(qbtn.sizeHint())
    qbtn.move(50, 50)       

    self.setGeometry(300, 300, 250, 150)
    self.setWindowTitle('Quit button')    
    self.show()

def q():
    print('test')
    sys.exit()

如果 __name__ == '__main__': 应用程序 = QApplication(sys.argv) ex = 示例() app.exec_()

首先它可以工作,但直到我按下“退出”按钮。然后会弹出错误信息。 如果我将 q() 函数放在类之外(并将“self.q”更改为“q”)它可以正常工作。 有什么问题?

提前致谢。

Windows 7 Python 3.4.3 (x86) PyQt 5.5.1 (x86)

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    这是因为当q() 在类中时,它需要一个强制参数作为第一个参数,这通常称为self,并且在您调用该方法时由python 隐式传递给您(q() 不是q(self))。就像你在你的类中使用 initUI 方法一样,当你把它放在类之外时,它只是一个普通的函数,而不是一个方法(类中的函数),所以定义没有 @ 的函数是可以的987654326@

    import sys
    from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
    from PyQt5.QtCore import QCoreApplication
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):               
            qbtn = QPushButton('Quit', self)
            qbtn.clicked.connect(self.q)
            qbtn.resize(qbtn.sizeHint())
            qbtn.move(50, 50)       
    
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('Quit button')    
            self.show()
    
        def q(self):
            print('test')
            sys.exit()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        app.exec_()
    

    【讨论】:

    • 另外,下次请确保在粘贴代码后正确缩进(如果由于某种原因格式混乱)并包含您收到的任何错误消息(它鼓励其他人帮助您) ...而不仅仅是说“错误”或“错误”
    • 感谢您的帮助,它运行良好。我在使用“pre”和“code”标签时遇到了一些格式问题,最后一部分只是变成了普通文本,所以我缩进它来发布问题,我不知道如何解决它,对不起
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多