您的位置:首页 > 编程语言 > Qt开发

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

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

源程序:

import sys
from PyQt5.QtWidgets import QWidget, \
QPushButton, \
QToolTip, \
QMessageBox, \
QApplication, \
QDesktopWidget, \
QMainWindow, \
QAction, \
qApp, \
QHBoxLayout, \
QVBoxLayout
from PyQt5.QtCore import QCoreApplication
from 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python PyQt5 应用教程