简单的布局在我的布局大全(一)中已经有了一些基本的介绍,今天我们一起来学习布局的一些深入的技巧
1,利用 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_())
pyqt5中分离器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_())