代码如下
from PyQt5.QtWidgets import QMainWindow,QHBoxLayout, QPushButton , QApplication, QWidget
import sys
class WinForm(QMainWindow):
def __init__(self, parent=None):
super(WinForm, self).__init__(parent)
self.resize(330, 100)
self.setWindowTitle('关闭主窗口例子')
self.button1 = QPushButton('关闭主窗口')
self.button1.clicked.connect(self.onButtonClick)
layout = QHBoxLayout()
layout.addWidget(self.button1)
main_frame = QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
def onButtonClick(self ):
#sender 是发送信号的对象,此处发送信号的对象是button1按钮
sender = self.sender()
print( sender.text() + ' 被按下了' )
qApp = QApplication.instance()
qApp.quit()
if __name__ == "__main__":
app = QApplication(sys.argv)
form = WinForm()
form.show()
sys.exit(app.exec_())
运行效果:
按下 关闭主窗口之后:
看log :
sender = self.sender() 获取 发送事件的那个对象
QMainWindow 不能使用setLayout
main_frame = QWidget() 是一个窗口 对象
self.setCentralWidget(main_frame) 把这个窗口对象设置到QMainWindow 中去.
main_frame 这个QWidget 是可以使用setLayout 布局的
main_frame.setLayout(layout)
那么这个layout是干嘛的呢?
self.button1 = QPushButton('关闭主窗口')
self.button1.clicked.connect(self.onButtonClick)
layout = QHBoxLayout()
layout.addWidget(self.button1) **加粗样式**
有就是说
QMainWindow 包含变量main_frame ,
变量main_frame 包含变量layout .
变量layout包含变量button1
<PyQt5快速开发与实战> 第4章