我想知道为什么当我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()
答案 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