QLayout是一个抽象类,不可视,只能用来布局窗口的表现方式。
QHBoxLayout和QVBoxLayout是一对用于布局的抽象类;
1 一个窗口采用一个Layout的语句是:self.setLayout( obj_layout )
2 layout的种类有三种:h_box = QtWidgets.QHBoxLayout(),al_box = QtWidgets.QVBoxLayout(),和 gridLayout =QGridLayout()
3 QGroupBox是组件的集合
4 layout内部可以嵌套组件或者layout,其语句是h_box.addWidget(self.b1) 和 al_box.addLayout(v_box)
5 addStretch(1),这个函数如何确定其中的参数大小,这里简单的说一下。addStretch函数的作用是在布局器中增加一个伸缩量,里面的参数表示QSpacerItem的个数,默认值为零,会将你放在layout中的空间压缩成默认的大小。例如用addStretch函数实现将QHBoxLayout的布局器的空白空间分配。
6 布局的类型有以下几种:
【绝对位置】
#coding = 'utf-8'
import sys from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.Init_UI()
def Init_UI(self):
self.setGeometry(300,300,400,300)
self.setWindowTitle('学点编程吧')
bt1 = QPushButton('剪刀',self)
bt1.move(50,250) bt2 = QPushButton('石头',self)
bt2.move(150,250) bt3 = QPushButton('布',self)
bt3.move(250,250) self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
app.exit(app.exec_())
当您使用绝对定位时,我们必须了解以下限制:
如果我们调整窗口大小,则小部件的大小和位置不会改变
各种平台上的应用可能会有所不同
在我们的应用程序中更改字体可能会损坏布局
如果我们决定改变我们的布局,我们必须彻底重做布局,这很浪费时间
【 箱式布局 】
import sys
from PyQt5.QtWidgetsimport (QWidget, QPushButton, QApplication, QHBoxLayout)
class Example(QWidget):
def __init__(self):
super().__init__()
self.Init_UI()
def Init_UI(self):
self.setGeometry(300,300,400,300)
self.setWindowTitle('学点编程吧')
bt1 = QPushButton('剪刀',self)
bt2 = QPushButton('石头',self)
bt3 = QPushButton('布',self)
hbox = QHBoxLayout()
hbox.addStretch(1)#增加伸缩量
hbox.addWidget(bt1)
hbox.addStretch(1)#增加伸缩量
hbox.addWidget(bt2)
hbox.addStretch(1)#增加伸缩量
hbox.addWidget(bt3)
hbox.addStretch(4)#增加伸缩量
self.setLayout(hbox)
self.show()
if __name__ =='__main__':
app = QApplication(sys.argv)
ex = Example()
app.exit(app.exec_())
栅格布局
表单布局,编辑伙伴
实验代码:
import sys
from PyQt5import QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.le = QtWidgets.QLineEdit()
self.b = QtWidgets.QPushButton('Push Clear')
self.le1 = QtWidgets.QLineEdit()
self.b1 = QtWidgets.QPushButton('Clear')
v_box = QtWidgets.QVBoxLayout()
v_box.addWidget(self.le)
v_box.addWidget(self.b)
h_box = QtWidgets.QHBoxLayout()
h_box.addWidget(self.le1)
h_box.addWidget(self.b1)
al_box = QtWidgets.QVBoxLayout()
al_box.addLayout(v_box)
al_box.addLayout(h_box)
# al_box.addStretch(1)
text = QtWidgets.QTextEdit()
al_box.addWidget(text)
self.setLayout(al_box)
self.setWindowTitle('PyQt5 Lesson 6')
self.show()
app = QtWidgets.QApplication(sys.argv)
a_window = Window()
# a_window.resize(800,600)
sys.exit(app.exec_())