PyQt5学习教程8:使用Box Layout布局控件

来源:互联网 发布:福建网络电视台电话 编辑:程序博客网 时间:2024/05/18 01:58

    本文将介绍Box Layout的使用方法,我们将在上一个例程的基础上,再增加2个push button,并将这3个push button始终维持在窗体的右下角,无论这个窗体如何变化。我们先来看一下程序。


源程序:

import sysfrom PyQt5.QtWidgets import QWidget, \                              QPushButton, \                              QToolTip, \                              QMessageBox, \                              QApplication, \                              QDesktopWidget, \                              QMainWindow, \                              QAction, \                              qApp, \                              QHBoxLayout, \                              QVBoxLayoutfrom PyQt5.QtCore import QCoreApplicationfrom PyQt5.QtGui import QFont, \                          QIcon# QMainWindow是QWidget的派生类class CMainWindow(QMainWindow):    def __init__(self):        super().__init__()        # ToolTip设置        QToolTip.setFont(QFont('华文楷体', 10))        # statusBar设置        self.statusBar().showMessage('准备就绪')        # 退出Action设置        exitAction = QAction(QIcon('1.png'), '&Exit', self)        exitAction.setShortcut('ctrl+Q')        exitAction.setStatusTip('退出应用程序')        exitAction.triggered.connect(qApp.quit)     # qApp就相当于QCoreApplication.instance()        # menuBar设置        menubar = self.menuBar()        fileMenu = menubar.addMenu('&File')        fileMenu.addAction(exitAction)        # toolBar设置        self.toolbar = self.addToolBar('Exit')        self.toolbar.addAction(exitAction)        # 确认PushButton设置        btnOK = QPushButton("OK")        btnOK.setToolTip("点击此按钮将确认改变!")        btnOK.setStatusTip("点击此按钮将确认改变!")        btnOK.resize(btnOK.sizeHint())        # 取消PushButton设置        btnCancel = QPushButton("Cancel")        btnCancel.setToolTip("点击此按钮将放弃改变!")        btnCancel.setStatusTip("点击此按钮将放弃改变!")        btnCancel.resize(btnCancel.sizeHint())        # 退出PushButton设置        btnQuit = QPushButton('退出')        btnQuit.setToolTip("点击此按钮将退出应用程序!")        btnQuit.setStatusTip("点击此按钮将退出应用程序!")        btnQuit.clicked.connect(QCoreApplication.instance().quit)        btnQuit.resize(btnQuit.sizeHint())        # 建立widget用于容纳这些控件,并进行布局        widget = QWidget()        self.setCentralWidget(widget)   # 建立的widget在窗体的中间位置        hBox = QHBoxLayout()        hBox.addStretch(1)        hBox.addWidget(btnOK)        hBox.addWidget(btnCancel)        hBox.addWidget(btnQuit)        vBox = QVBoxLayout()        vBox.addStretch(1)        vBox.addLayout(hBox)        widget.setLayout(vBox)        self.resize(500, 300)        self.center()        self.setFont(QFont('华文楷体', 10))        self.setWindowTitle('PyQt5应用教程(snmplink编著)')        self.setWindowIcon(QIcon('10.png'))        self.show()    def center(self):        # 得到主窗体的框架信息        qr = self.frameGeometry()        # 得到桌面的中心        cp = QDesktopWidget().availableGeometry().center()        # 框架的中心与桌面中心对齐        qr.moveCenter(cp)        # 自身窗体的左上角与框架的左上角对齐        self.move(qr.topLeft())    def closeEvent(self, QCloseEvent):        reply = QMessageBox.question(self,                                     'PyQt5应用教程(snmplink编著)',                                     "是否要退出应用程序?",                                     QMessageBox.Yes | QMessageBox.No,                                     QMessageBox.No)        if reply == QMessageBox.Yes:            QCloseEvent.accept()        else:            QCloseEvent.ignore()if __name__ == '__main__':    app = QApplication(sys.argv)    MainWindow = CMainWindow()    sys.exit(app.exec_())



解释:

1、第11行:输入QHBoxLayout模块,用于水平布局控件。

2、第12行:输入QVBoxLayout模块,用于垂直布局控件。

3、第46-49行:增加“OK”按钮。

4、第52-55行:增加“Cancel”按钮。

5、第65行:声明Widget对象,由于CMainWindow是从QMainWindow派生而来,而QMainWindow已经具有Layout,所以不能使用SetLayout方法,为了解决此问题,声明widget对象,并使其居中窗体,然后将需要布局的控件放在widget中,重新布局。

6、第66行,将widget定位到窗体中间位置。

7、第68行,声明QHBoxLayout对象hBox。

8、第69行,设置伸缩空间,在控件之前设置伸缩空间,则控件居右显示。

9、第70-72行,加入控件。

10、第74行,声明QVBoxLayout对象vBox。

11、第75行:设置伸缩空间,在控件之前设置伸缩空间,则控件居下显示。

12、第76行,将对象hBox的Layout加入vBox。

13、第78行,设置Layout布局。


程序的运行效果:



原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163     
CSDN:http://blog.csdn.net/qingwufeiyang12346