self.close_application添加“ self.close_application()”导致程序关闭

时间:2018-09-06 23:36:39

标签: python pyqt4

我想知道为什么当我btn.clicked.connect(self.close_application())时程序立即关闭。即使我没有单击打印按钮,似乎也执行了self.close_application。但是,当我使用btn.clicked.connect(self.close_application)时,它可以正常工作。

任何人都可以向我解释为什么使用self.close_applciation()导致我的Q窗口立即关闭,甚至没有我单击“打印”按钮的情况吗?

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50,50,500,500)
        self.setWindowTitle("Kenny")

        self.home()
        self.show()

    def home(self):
        self.FullName()
        self.show()

    def FullName(self):
        win = QWidget(self)

        flo=QFormLayout()
        btn = QtGui.QPushButton("&Print",self)
        btn.clicked.connect(self.close_application)
        flo.addRow(btn ,QPushButton("Cancel"))
        self.setCentralWidget(win)
        win.setLayout(flo)        
        win.show()

    def close_application(self):
        print("Bye Bye")
        sys.exit() 



def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())


run()

1 个答案:

答案 0 :(得分:0)

因为当您编写btn.clicked.connect(self.close_application())时,self.close_application()会立即执行(该函数的结果将发送到btn.clicked.connect,但那时该应用程序已关闭)。 / p>

btn.clicked.connect(self.close_application)时不是-因为您没有调用它。

相反,此代码将对绑定方法self.close_application的引用发送到btn.clicked.connect,在单击按钮时执行该引用。


将其与另一个示例进行比较:

def f():
    print('ffff')

调用f()会显示ffff,但是仅使用对f的引用不会显示任何内容:

a = f()  # prints ffff
b = f    # does not print anything

b()      # prints ffff