当前位置: 首页 > 知识库问答 >
问题:

pyqt5-pythonw.exe在处理单击事件时崩溃

颛孙霖
2023-03-14

我是PyQt5的新手,下面的代码出现了一个错误(pythonw.exe不再工作):

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import 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()

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

共有1个答案

贲骏喆
2023-03-14

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

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_()
 类似资料:
  • 一旦我捕捉到传单标记上的点击事件并转到相关的函数,我就会为当前上下文释放它。 标记创建代码: const marker=L.marker([lon,lat],c).addEventListener(“单击”,this.onclickRainsion).addTo(映射); 与之相关的功能是: } 在这里,当我试图访问this.get数据时,在运行时我得到错误"错误类型错误:this.get数据不是

  • 问题内容: 在捕获阶段而不是冒泡阶段是否可能会出现angularjs ng-click处理事件?我想按照从父项开始到被单击元素结束的顺序汇总每个父项元素的数据。 问题答案: 让我们在ngEventDirs.js#L50上查看源代码 如您所见,和使用所有其他事件指令。 因此,答案是 否定的,这是不可能的 。 如果确实需要,可以为此编写一个自定义指令。例如,修改一下代码: 并像这样使用它: 柱塞示例:

  • 问题内容: 有没有一种方法可以设置一个元素,使其在左键单击(ng-click)上执行一个动作,然后在右键单击上执行另一个动作? 现在我有类似的东西: 而且我还希望能够右键单击范围以执行函数decrement();。 问题答案: 您可以使用指令,使用event 绑定右键单击时的特定操作: 小提琴上的代码示例

  • 我正在尝试做一些非常简单的事情,在点击按钮时更改文本。 我似乎无法使用它,有人能告诉我添加ActionListener的正确位置吗? 主要类别 atmGUI类 编辑: 这是产生的错误 类型new ActionListener(){}必须实现继承的抽象方法ActionListener.actionPerform(ActionEvent)

  • 我有一个像标志一样的布尔字段来声明表中的行是否被删除。它使用复选框显示,因此如果数据已被删除,复选框值为true,反之亦然。 以下是显示表格的代码: 在表中,我可以单击复选框,但我不知道如何处理单击事件,因为我使用数据来显示数据。如何处理复选框事件使用可数据?

  • 我只是想知道我是不是做错了什么,因为我对这一切都是陌生的<如果您还有什么需要我补充的,请告诉我 这是回购分支,如果您想查看所有代码,我将尝试在其中实现ViewPager。 所以我有4个用表示的类别,每个类别都包含一个的项目,每个项目都有一个,应该会再现一些音频。 我正在尝试使用ViewPager显示,但问题是当我从滚动到另一个,然后回到已经创建的时,它不会注册触摸事件,什么都不会发生,甚至没有错误