PyQt5 QWidget代码使用未初始化的变量

时间:2016-03-16 13:16:47

标签: python qt pyqt qwidget pyqt5

我正在关注zetcode.com的教程,我似乎遇到了麻烦。这段代码应该非常简单,所以我把它贴在下面。

这是QWidget类的实例(所有UI对象的基类)的一部分。我已经意识到这是我编写GUI时需要理解的基本类之一,而我对程序中发生的事情感到困惑。

程序很简单:PyQt打开一个窗口,然后你可以通过'x'按钮退出该窗口。点击“x”后,询问“你确定要退出吗?”的消息允许您继续退出或取消。

import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication


class Example(QWidget):

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

    self.initUI()


def initUI(self):

    self.setGeometry(300, 300, 250, 150)
    self.setWindowTitle('Message box')
    self.show()

def closeEvent(self, event):

    reply = QMessageBox.question(self, 'Message',
        "Are you sure to quit?", QMessageBox.Yes |
        QMessageBox.No, QMessageBox.No)

    if reply == QMessageBox.Yes:
        event.accept()
    else:
        event.ignore()


if __name__ == '__main__':

app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

那么什么是没有意义的? QWidget调用的closeEvent()方法。该方法似乎接受一个永远不会初始化但以某种方式传递给函数的变量“事件”。然后在以前从未初始化的对象上调用方法“event.accept()”和“event.ignore()”。

我是PyQt / Qt中的菜鸟,也许这也是对Python的误解。以下是函数http://doc.qt.io/qt-5/qwidget.html#closeEvent的文档,可能会澄清事情。

1 个答案:

答案 0 :(得分:2)

  

该方法似乎接受一个永远不会的变量“事件”   初始化但以某种方式传递给函数。

方法的工作原理。考虑这个简单的功能:

def print_a_word(word):
   print(word)

它需要一个参数word,我们没有初始化。当您调用该函数时,您需要定义word是什么:

word = "unicorn"
print_a_word(word)

如果您更详细地查看文档,您会看到eventQCloseEvent,并且QWidget

中的其他位置已“初始化”
  

QCloseEvent类包含描述close事件的参数。

     

通常会将关闭事件发送到用户想要关闭的小部件   从窗口菜单中选择“关闭”,或单击X标题   酒吧按钮。当你调用QWidget :: close()关闭时,它们也会被发送   以编程方式创建小部件。