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
源程序:
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
相关文章推荐
- android控件学习二:使用LayoutInflater动态加载布局和操作控件
- PyQt5学习教程9:使用Grid Layout布局计算器界面
- c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局
- MonoRail学习笔记十二:layout布局的使用
- 流程图控件FlowChart.NET中FractalLayout布局算法的使用
- 开源中国iOS客户端学习——(十三)使用UIWebView控件布局视图
- 在ASP.NET的server form 中使用easyui的layout布局控件
- 安卓学习第二十一天:相对布局的使用,以及时间控件
- [导入] 转[教程] 学习如何使用有趣的自定义标记来布局页面!
- 开源中国iOS客户端学习——(十三)使用UIWebView控件布局视图
- 使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame
- ios学习之autolayout自动布局的简单理解 即UIKIt dymanic的使用
- C#学习笔记-WPF前端布局和控件的使用
- Zend Framework 1.x中Zend_Layout使用教程(实现视图布局)
- 开源中国iOS客户端学习——(十三)使用UIWebView控件布局视图
- 开源中国iOS客户端学习——(十三)使用UIWebView控件布局视图 推荐
- c# winForm TableLayoutPanel学习 合并行的布局及动态增加删除内部控件
- 自己开发的web快速开发平台教程(1),布局(Layout)的使用教程
- 使用 TableLayoutPanel 控件设置窗体布局
- QT的学习之路 1布局控件(Layout)