PyQt5布局大全(二)

1,348 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

简单的布局在我的布局大全(一)中已经有了一些基本的介绍,今天我们一起来学习布局的一些深入的技巧

1,利用 addStretch

Stretch英文意思是伸展; 拉长; 拽宽; 撑大; 抻松,addStretch是添加伸缩量,也可以理解占比的意思,相比前面提到几种布局而言,这里我们可以自定义的控制空白部分和相关空间在水平或者是垂直方向的占比

这里写图片描述

from PyQt5.QtWidgets import QApplication ,QWidget, QVBoxLayout , QHBoxLayout  ,QPushButton
import sys

class WindowDemo(QWidget):
	def __init__(self):
		super().__init__()

		btn1 = QPushButton(self)
		btn2 = QPushButton(self)
		btn3 = QPushButton(self)
		btn1.setText("button1")
		btn2.setText("button2")
		btn3.setText("button3")
		hbox = QHBoxLayout()
		#设置伸缩量为1
		hbox.addStretch(1)
		hbox.addWidget(btn1)
		#设置伸缩量为1
		hbox.addStretch(2)
		hbox.addWidget(btn2)
		# 设置伸缩量为1
		hbox.addStretch(1)
        hbox.addWidget( btn3 )
        # 设置伸缩量为1
        hbox.addStretch(1 )      
		'''介绍一些,这里的伸缩量表示的是四个空格区域在窗口拉伸的情况下所占的空间位置'''
		self.setLayout(hbox)
		self.setWindowTitle("addStretch")
	
if __name__ == "__main__":
	app  =QApplication(sys.argv)
	win = WindowDemo()
	win.show()
	sys.exit(app.exec_())

从上面的代码中我们可以看大,我们在按钮的中间也设置了伸缩量,其中伸缩量可以理解为无形的控件,换句话说我们可以理解为弹簧

2,嵌套布局

在平时的开发中我们肯定很大一部分情况使用的是嵌套布局,那么这种嵌套布局其实就是各种布局的组合,下面的例子我们用到的是垂直布局和水平布局的组合,其实这种复合布局是最常见的,因为在我们的项目开发过程中,我们的界面业务一般都是非常复杂的,而并非一种布局就能满足,因此我们有必要学习多种布局的组合使用。

这里写图片描述

import sys
from PyQt5.QtWidgets import QApplication  ,QWidget , QHBoxLayout,  QVBoxLayout,  QGridLayout ,  QFormLayout, QPushButton 

class MyWindow(QWidget):
	def __init__(self):
		super().__init__()
		self.setWindowTitle("嵌套布局")
		
		#全局布局:水平
		wlayout = QHBoxLayout()
		#局部布局(4个):水平、竖直、网格、表单
		hlayout = QHBoxLayout()
		vlayout = QVBoxLayout()
		glayout = QGridLayout()
		formlayout = QFormLayout()

		#局部布局添加控件(这里以添加按钮为例)
		hlayout.addWidget(QPushButton(str(1)))
		hlayout.addWidget(QPushButton(str(2)))
		
		vlayout.addWidget(QPushButton(str(3)))
		vlayout.addWidget(QPushButton(str(4)))

		glayout.addWidget(QPushButton(str(5), 0, 0))
		glayout.addWidget(QPushButton(str(6), 0, 1))
		glayout.addWidget(QpushButton(str(7), 1,0))
		glayout.addWidget(QPushButton(str(8),1 ,1))

		formlayout.addWidget(QPushButton(str(9)))
		formlayout.addWidget(QPushButton(str(10)))
		formlayout.addWidget( QPushButton(str(11)) )
        formlayout.addWidget( QPushButton(str(12)) )
		#准备四个部件
		hwg = QWidget()
		vwg = QWidget()
		gwg = QWidget()
		fwg = QWidget()
		#四个部件设置局部布局
		hwg.setLayout(hlayout)
		vwg.setLayout(vlayout)
		gwg.setLayout(glayout)
		fwg.setLayout(formlayout)
		#四个部件加载至全局布局
		wlayout.addWidget(hwg)
		wlayout.addWidget(vwg)
		wlayout.addWidget(gwg)
		wlayout.addWidget(fwg)
		self.setLayout(wlayout)
if __name__=="__main__":    
    app =  QApplication(sys.argv)    
    win = MyWindow()  
    win.show()  
    sys.exit(app.exec_())
		

3pyqt5中分离器QSplitter的使用

这里写图片描述

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class SpliterExample(QWidget):
	def __init__(self):
		super(SplitterExample, self).__init__()
		self.initUI()
	def initUI(self):
		hbox = QHboxLayout(self)
		self.setWindowTitle("QSplitter")
		self.setGeometry(300,300,300,200)
		
		topleft = QFrame()
		topleft.setFrameShape(QFrame.StylePanel)'
		bottom = QFrame()
		bottom.setFrameShape(QFrame.StylePanel)
		
		splitter1 = QSplitter(Qt.Horizontal)
		textedit = QTextEdit()
		splitter1.addWidget(topleft)
		splitter1.addWdiget(textedit)
		splitter1.setSize([100, 300])
		splitter2 = QSplitter(Qt.Vertical)
		splitter2.addWidget(splitter1)
		splitter2.addWidget(bottom)
		hbox.addWidget(splitter2)
		self.setLayout(hbox)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = SplitterExample()
    demo.show()
    sys.exit(app.exec_())